package com.iamberry.rst.controllers.cm;

import com.iamberry.rst.core.cm.*;
import com.iamberry.rst.core.order.Order;
import com.iamberry.rst.core.order.Product;
import com.iamberry.rst.core.order.ProductType;
import com.iamberry.rst.core.order.RentType;
import com.iamberry.rst.core.page.PageRequest;
import com.iamberry.rst.core.page.PagedResult;
import com.iamberry.rst.core.pts.PtsDevice;
import com.iamberry.rst.faces.cm.AwaitingSignclosedProductInfoService;
import com.iamberry.rst.faces.cm.ComplaintDetectInfoService;
import com.iamberry.rst.faces.cm.ComplaintSignclosedProductInfoService;
import com.iamberry.rst.faces.cm.FittingsInfoService;
import com.iamberry.rst.faces.product.ProductService;
import com.iamberry.rst.service.cm.mapper.AwaitingSignclosedProductMapper;
import com.iamberry.rst.service.cm.mapper.ComplaintSignclosedInfoMapper;
import com.iamberry.rst.service.cm.mapper.ComplaintSignclosedProductInfoMapper;
import com.iamberry.rst.utils.AdminUtils;
import com.iamberry.wechat.tools.ResponseJson;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * Created by wxm on 2017/8/29.
 */
@Controller
@RequestMapping("/admin/detect")
public class AdminDetectController {

   // private
    @Autowired
    private ComplaintDetectInfoService complaintDetectInfoService;
    @Autowired
    private ProductService productService;
    @Autowired
    private ComplaintSignclosedInfoMapper complaintSignclosedInfoMapper;
    @Autowired
    private ComplaintSignclosedProductInfoService signclosedProductInfoService;
    @Autowired
    private AwaitingSignclosedProductInfoService awaitingSignclosedProductService;
    /**
     * 跳转到添加检测记录页面
     *
     * @return
     */
    @RequiresPermissions("detect:add:detect")
    @RequestMapping(value = "/to_add_detect")
    public ModelAndView toAddDetect(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/inspection/add_detect");
        Product product = new Product();
        List<Product> productList = productService.listProductAndColorAndfittings(product);
        mv.addObject("productList",productList);
        /*//获取所有配件
        List<FittingsInfo> listFittings = fittingsInfoService.listFittings();
        mv.addObject("listFittings",listFittings);*/
        return mv;
    }



    /**
     * 客诉 - 查询品质检测列表
     * @param request
     * @return
     */
    @RequiresPermissions("detect:select:detect")
    @RequestMapping("/select_detect_list")
    public ModelAndView selectDetectList(HttpServletRequest request,
                                        @RequestParam(value = "pageNO", defaultValue = "1", required = false) int pageNO,
                                        @RequestParam(value = "pageTotal", required = false) Integer pageTotal,
                                        @RequestParam(value = "pageSize", defaultValue = "5", required = false) int pageSize,
                                         ComplaintDetectInfo detectInfo) {

        ModelAndView mv = new ModelAndView("cm/inspection/detect_list");
        StringBuilder url = new StringBuilder("/admin/detect/select_detect_list?pageSize=" + pageSize);

        // 请求参数
        if (StringUtils.isNotEmpty(detectInfo.getQuestionTitle())) {
            url.append("&questionTitle=").append(detectInfo.getQuestionTitle());
            mv.addObject("questionTitle",detectInfo.getQuestionTitle());
        }
        if (StringUtils.isNotEmpty(detectInfo.getDetectPhenomenon())) {
            url.append("&detectPhenomenon=").append(detectInfo.getDetectPhenomenon());
            mv.addObject("detectPhenomenon",detectInfo.getDetectPhenomenon());
        }
        if (StringUtils.isNotEmpty(detectInfo.getDetectFailureCause())) {
            url.append("&detectFailureCause=").append(detectInfo.getDetectFailureCause());
            mv.addObject("detectFailureCause",detectInfo.getDetectFailureCause());
        }
        if (StringUtils.isNotEmpty(detectInfo.getDetectPoint())) {
            url.append("&detectPoint=").append(detectInfo.getDetectPoint());
            mv.addObject("detectPoint",detectInfo.getDetectPoint());
        }
        if (StringUtils.isNotEmpty(detectInfo.getDetectAnalysis())) {
            url.append("&detectAnalysis=").append(detectInfo.getDetectAnalysis());
            mv.addObject("detectAnalysis",detectInfo.getDetectAnalysis());
        }
        if (detectInfo.getDetectState() != null && detectInfo.getDetectState() != -1) {
            url.append("&detectState=").append(detectInfo.getDetectState());
            mv.addObject("detectState",detectInfo.getDetectState());
        }
        if (StringUtils.isNotEmpty(detectInfo.getDetectFailureClassification())) {
            url.append("&detectFailureClassification=").append(detectInfo.getDetectFailureClassification());
            mv.addObject("detectFailureClassification",detectInfo.getDetectFailureClassification());
        }
        if (detectInfo.getProductTypeId() != null && detectInfo.getProductTypeId() != -1) {
            url.append("&productTypeId=").append(detectInfo.getProductTypeId());
            mv.addObject("productTypeId",detectInfo.getProductTypeId());
        }

        // 封装请求数据
        PageRequest<ComplaintDetectInfo> pageRequest = new PageRequest<>(detectInfo, pageNO, pageSize, pageTotal == null);
        // 查询订单列表
        PagedResult<ComplaintDetectInfo> result = complaintDetectInfoService.listComplaintDetect(pageRequest);
        long total = 0;
        if (pageTotal == null) {
            total = result.getPages();
        } else {
            total = pageTotal;
            result.setPages(total);
        }
        //获取所有产品类型
        ProductType productType = new ProductType();
        List<ProductType> productTypeList = productService.listProductType(productType);
        mv.addObject("productTypeList",productTypeList);
        url.append("&pageTotal=").append(total).append("&pageNO=");
        mv.addObject("page", result);
        mv.addObject("url", url.toString());
        return mv;
    }

    /**
     * 添加检测信息
     * @param request
     * @return
     * @throws Exception
     */
    @RequiresPermissions("detect:add:detect")
    @ResponseBody
    @RequestMapping("/add_detect")
    public ResponseJson addDetect(HttpServletRequest request, ComplaintDetectInfo detectInfo) throws Exception {
        ResponseJson msg = new ResponseJson();
        if(detectInfo == null){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getProductId() == null || detectInfo.getProductId().equals("")){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getProductId() != null){
            detectInfo.setProductColorId(Integer.valueOf(request.getParameter("colorId"+detectInfo.getProductId())));
            detectInfo.setMachineNo(request.getParameter("maintenanceEquipmentNumber"+detectInfo.getProductId()));

        }
        Product product = productService.getProduce(detectInfo.getProductId());
        detectInfo.setDetectProductNumber(product.getProductNumber());
        String detectDate = request.getParameter("detect_date");
        if(detectDate == null){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        detectInfo.setDetectDate(format.parse(detectDate));
        Integer num = complaintDetectInfoService.insert(detectInfo);
        if (num < 1) {
            msg.setResultCode(500);
            msg.setReturnCode(500);
        } else {
            msg.setResultCode(200);
            msg.setReturnCode(200);
        }
        return msg;
    }

    /**
     * 跳转到添加检测备注页面
     *
     * @return
     */
    @RequiresPermissions("info:update:info")
    @RequestMapping(value = "/to_add_remark")
    public ModelAndView toAddRemark(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/inspection/add_remark");
        String detectId = request.getParameter("detectId");
        if(detectId == null || detectId.equals("")){
            return mv;
        }
        ComplaintDetectInfo detectInfo = complaintDetectInfoService.getComplaintDetectById(Integer.valueOf(detectId));
        mv.addObject("detectId",detectId);
        mv.addObject("detectInfo",detectInfo);
        return mv;
    }

    /**
     * 跳转到添加修改转入信息页面
     *
     * @return
     */
    @RequiresPermissions("remark:add:remark")
    @RequestMapping(value = "/to_produced_info")
    public ModelAndView toProducedInfo(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/inspection/update_produced_info");
        String detectId = request.getParameter("detectId");
        String state = request.getParameter("state");
        if(detectId == null || detectId.equals("")){
            return mv;
        }
        ComplaintDetectInfo detectInfo = complaintDetectInfoService.getComplaintDetectById(Integer.valueOf(detectId));
        mv.addObject("detectId",detectId);
        mv.addObject("detectInfo",detectInfo);
        mv.addObject("state",state);
        return mv;
    }

    /**
     * 跳转到检测完成页面
     *
     * @return
     */
    @RequiresPermissions("complete:update:complete")
    @RequestMapping(value = "/to_detect_complete")
    public ModelAndView toDetectComplete(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/inspection/detect_complete");
        String detectId = request.getParameter("detectId");
        if(detectId == null || detectId.equals("")){
            return mv;
        }
        ComplaintDetectInfo detectInfo = complaintDetectInfoService.getComplaintDetectById(Integer.valueOf(detectId));
        mv.addObject("detectId",detectId);
        mv.addObject("detectInfo",detectInfo);
        return mv;
    }


    /**
     * 添加/修改检测信息
     * @param request
     * @return
     * @throws Exception
     */
    @RequiresPermissions("remark:add:remark")
    @ResponseBody
    @RequestMapping("/add_remark")
    public ResponseJson addRemark(HttpServletRequest request, ComplaintDetectInfo detectInfo) throws Exception {
        ResponseJson msg = new ResponseJson();
        if(detectInfo == null){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getDetectId() == null || detectInfo.getDetectId().equals("")){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getDetectIsMaintenance() == 2){ //选择不需要转入时 detect_revolution_produced 统一改为待转入
            detectInfo.setDetectRevolutionProduced(1);
        }
        Integer num = complaintDetectInfoService.updateComplaintDetectById(detectInfo);
        if (num < 1) {
            msg.setResultCode(500);
            msg.setReturnCode(500);
        } else {
            msg.setResultCode(200);
            msg.setReturnCode(200);
        }
        return msg;
    }

    /**
     * 检测完成
     * @param request
     * @return
     * @throws Exception
     */
    @RequiresPermissions("complete:update:complete")
    @ResponseBody
    @RequestMapping("/detect_complete")
    public ResponseJson detect_complete(HttpServletRequest request, ComplaintDetectInfo detectInfo) throws Exception {
        ResponseJson msg = new ResponseJson();
        if(detectInfo == null){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getDetectId() == null || detectInfo.getDetectId().equals("")){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getDetectIsMaintenance() == 2){ //选择不需要转入时 detect_revolution_produced 统一改为待转入
            detectInfo.setDetectRevolutionProduced(1);
        }
        Integer num = complaintDetectInfoService.updateComplaintDetect(detectInfo);
        if (num < 1) {
            msg.setResultCode(500);
            msg.setReturnCode(500);
        } else {
            msg.setResultCode(200);
            msg.setReturnCode(200);
        }
        return msg;
    }

    /**
     * 跳转到查看仓储进度页面
     *
     * @return
     */
    @RequiresPermissions("complete:update:complete")
    @RequestMapping(value = "/to_view_progress")
    public ModelAndView toViewProgress(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/inspection/view_progress");
        String signclosedId = request.getParameter("signclosedId");
        if(signclosedId == null || signclosedId.equals("")){
            return mv;
        }
        if(Integer.valueOf(signclosedId) == 0){
            return mv;
        }
        List<SignclosedProductInfo> signclosedProductInfo = null;
        List<AwaitingSignclosedProductInfo> awaitingSignclosedProductInfo = null;
        ComplaintSignclosedInfo complaintSignclosedInfo = complaintSignclosedInfoMapper.getSignclosedById(Integer.valueOf(signclosedId));

        if(complaintSignclosedInfo.getSignclosedState() == 1){//如果已签收。查询签收表所有产品 反之查询待签收表
            signclosedProductInfo = signclosedProductInfoService.listSignclosedById(complaintSignclosedInfo.getSignclosedId());
        }else{
            awaitingSignclosedProductInfo = awaitingSignclosedProductService.listByPrimaryId(complaintSignclosedInfo.getSignclosedId());
        }

        mv.addObject("signclosedProductInfo",signclosedProductInfo == null ? awaitingSignclosedProductInfo :signclosedProductInfo);
        mv.addObject("signclosedInfo",complaintSignclosedInfo);
        mv.addObject("signclosedId",signclosedId);
        return mv;
    }

    /**
     * 跳转到查看物流信息页面
     *
     * @return
     */
    @RequiresPermissions("complete:update:complete")
    @RequestMapping(value = "/to_view_logistics")
    public ModelAndView toViewLogistics(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/logistics/view_logistics");
        String billCode = request.getParameter("billCode");
        String billName = request.getParameter("billName");
        if(billCode == null || billCode.equals("") ||billName == null || billName.equals("")){
            return mv;
        }
        mv.addObject("billCode",billCode);
        mv.addObject("billName",billName);
        return mv;
    }

    /**
     * 增加催促提醒
     * @param request
     * @return
     * @throws Exception
     */
    @RequiresPermissions("reminding:add:reminding")
    @ResponseBody
    @RequestMapping("/add_reminding")
    public ResponseJson add_reminding(HttpServletRequest request,ComplaintSignclosedInfo complaintSignclosedInfo) throws Exception {
        ResponseJson msg = new ResponseJson();
        Integer num = complaintSignclosedInfoMapper.updateUrgedNumById(complaintSignclosedInfo);
        if (num < 1) {
            msg.setResultCode(500);
            msg.setReturnCode(500);
        } else {
            msg.setResultCode(200);
            msg.setReturnCode(200);
        }
        return msg;
    }

    /**
     * 跳转到修改检测完成信息页面
     *
     * @return
     */
    @RequiresPermissions("complete:update:complete")
    @RequestMapping(value = "/to_update_complete")
    public ModelAndView toUpdateComplete(HttpServletRequest request) {
        ModelAndView mv = new ModelAndView("cm/inspection/update_complete");
        String detectId = request.getParameter("detectId");
        if(detectId == null || detectId.equals("")){
            return mv;
        }
        ComplaintDetectInfo detectInfo = complaintDetectInfoService.getComplaintDetectById(Integer.valueOf(detectId));
        mv.addObject("detectId",detectId);
        mv.addObject("detectInfo",detectInfo);
        return mv;
    }

    /**
     * 检测完成
     * @param request
     * @return
     * @throws Exception
     */
    @RequiresPermissions("complete:update:complete")
    @ResponseBody
    @RequestMapping("/update_complete")
    public ResponseJson update_complete(HttpServletRequest request, ComplaintDetectInfo detectInfo) throws Exception {
        ResponseJson msg = new ResponseJson();
        if(detectInfo == null){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        if(detectInfo.getDetectId() == null || detectInfo.getDetectId().equals("")){
            msg.setResultCode(500);
            msg.setReturnCode(500);
            return msg;
        }
        Integer num = complaintDetectInfoService.updateComplaintDetectById(detectInfo);
        if (num < 1) {
            msg.setResultCode(500);
            msg.setReturnCode(500);
        } else {
            msg.setResultCode(200);
            msg.setReturnCode(200);
        }
        return msg;
    }
}