/**
 */
package com.sifang.modules.flowpath.web;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import com.jfinal.plugin.activerecord.Record;
import com.sifang.modules.flowable.service.ProcessFlowableService;
import com.sifang.modules.flowable.utils.FormUtils;
import com.sifang.modules.flowpath.entity.ExamineInfo;
import com.sifang.modules.flowpath.service.DistributionGoodsApplyService;
import com.sifang.modules.flowpath.service.ExamineInfoService;
import com.sifang.modules.flowpath.vo.DistributionGoodsVo;
import com.sifang.modules.flowpath.vo.UserApplyVo;
import com.sifang.modules.sunshine.SystemSetting.utils.CustomException;
import com.sifang.modules.sunshine.SystemSetting.utils.Result;
import com.sifang.modules.sys.common.UserUtils;
import com.sifang.modules.sys.common.entity.User;
import com.sifang.modules.sys.util.LayuiPage;
import com.sifang.modules.sys.web.BaseController;
import com.sifang.modules.sys.web.BaseExceptionController;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import com.sifang.modules.flowpath.service.BondApplyService;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/** 保证金调整申请
 * @version 
 */
@Controller
@RequestMapping(value = "${adminPath}/apply/bondAdjustment")
public class BondApplyController extends BaseExceptionController {

	protected Logger logger = LoggerFactory.getLogger(getClass());

	@Autowired
	private BondApplyService bondApplyService;

	@Autowired
	private DistributionGoodsApplyService applyService;

	@Autowired
	private ExamineInfoService examineInfoService;

	@Autowired
	private ProcessFlowableService flowableService;


	//页面
	@RequestMapping(value = "bondAdjustmentListPage")
	public String bondAdjustmentListPage(Model model) {
		User user = UserUtils.getUser();
		model.addAttribute("userId",user.getId());
		model.addAttribute("formId", FormUtils.MARGIN_ADJUSTMENT_APPLICATION);
		return "modules/flowpath/bondAdjustmentListPage";
	}

	@ResponseBody
	@RequestMapping(value = "listData")
	public String listData(HttpServletRequest request){
		Map<String, String> map = getParams(request);
		LayuiPage page = new LayuiPage(request);
		bondApplyService.applyList(page,map);
		return page.renderJson();
	}

	//新增页面
	@RequestMapping(value = "addBondAdjustmentApplyPage")
	public String addBondAdjustmentApplyPage(Model model){
		List<Record> list=applyService.getTrader();
		model.addAttribute("traders",list);
		model.addAttribute("imgsCount", 0);
		return "modules/flowpath/addBondAdjustmentApplyPage";
	}

	//新建/修改申请
	@ResponseBody
	@RequestMapping(value = "saveBondAdjustmentApply")
	public Result saveDistributionGoods(@RequestBody DistributionGoodsVo vo){
		try{
			bondApplyService.saveBondAdjustApply(vo);
			return Result.ok();
		}catch (RuntimeException r){
			r.printStackTrace();
			return Result.fail(r.getMessage());
		}catch (Exception e){
			e.printStackTrace();
			logger.error(">>>>>>>>>>>saveBondAdjustmentApply e:{}",e);
		}
		return Result.fail("保存失败");
	}

	//编辑页面
	@RequestMapping(value = "editBondAdjustmentApplyPage")
	public String editBondAdjustmentApplyPage(HttpServletRequest request,Model model){
		String id=request.getParameter("id");
		Record apply=bondApplyService.getDetailById(id);
		model.addAttribute("apply",apply);
		List<Record> list=applyService.getTrader();
		model.addAttribute("traders",list);
		List<ExamineInfo> infos=examineInfoService.getByApplyId(id,FormUtils.MARGIN_ADJUSTMENT_APPLICATION);
		model.addAttribute("infos",infos);
		int imgsCount = 0;
		if (org.apache.commons.lang3.StringUtils.isNotBlank(apply.getStr("voucher"))) {
			String[] imgArr = apply.getStr("voucher").split(",");
			imgsCount = imgArr.length;
			List<String> imglist = Arrays.asList(imgArr);
			model.addAttribute("imglist", imglist);
		}
		model.addAttribute("imgsCount", imgsCount);
		return "modules/flowpath/addBondAdjustmentApplyPage";
	}

	//查看详情
	@RequestMapping(value = "bondAdjustmentApplyDetail")
	public String ApplyDistributionGoods(HttpServletRequest request,Model model){
		String id=request.getParameter("id");
		String from=request.getParameter("from"); //from = audit 那么就是审批操作  否则就是查看
		model.addAttribute("from",from);
		Record apply=bondApplyService.getDetailById(id);
		model.addAttribute("apply",apply);
		List<ExamineInfo> infos=examineInfoService.getByApplyId(id,FormUtils.MARGIN_ADJUSTMENT_APPLICATION);
		model.addAttribute("infos",infos);
		if (StringUtils.isNotBlank(apply.getStr("voucher"))) {
			String[] imgArr = apply.getStr("voucher").split(",");
			List<String> imglist = Arrays.asList(imgArr);
			model.addAttribute("imglist", imglist);
		}
		User user=UserUtils.getUser();
		model.addAttribute("user",user);
		if(!"audit".equals(from)){
			flowableService.readApplication(apply.getStr("process_instance_id"),FormUtils.MARGIN_ADJUSTMENT_APPLICATION,id,user);
		}
		return "modules/flowpath/bondAdjustmentApplyDetail";
	}

	//删除申请
	@ResponseBody
	@RequestMapping(value = "deleteBondAdjustApply")
	public Result deleteBondAdjustApply(HttpServletRequest request){
		String id=request.getParameter("id");
		try{
			bondApplyService.deleteBondAdjustApply(id);
			return Result.ok();
		}catch (RuntimeException r){
			r.printStackTrace();
			return Result.fail(r.getMessage());
		}catch (Exception e){
			logger.error(">>>>>>>>>>>>>>deleteBondAdjustApply e:{}",e);
			e.printStackTrace();
			return Result.fail("删除失败！");
		}
	}

	//审核通过
	@ResponseBody
	@RequestMapping(value = "examineBondAdjustApplyApprove")
	public Result examineBondAdjustApplyApprove(UserApplyVo userApplyVo){
		try{
			bondApplyService.examineBondAdjustApplyApprove(userApplyVo.getId(),userApplyVo.getTaskId(),userApplyVo.getContent());
			return Result.ok();
		}catch (RuntimeException c){
			logger.info(">>>>>>>>>>>>>>examineBondAdjustApplyApprove c:{}",c);
			return Result.fail(c.getMessage());
		}catch (Exception e){
			e.printStackTrace();
			logger.error(">>>>>>>>>>>>>>examineBondAdjustApplyApprove e:{}",e);
			return Result.fail("审核失败！");
		}
	}

	//审核驳回
	@ResponseBody
	@RequestMapping(value = "rejectBondAdjustApplyTask")
	public Result rejectBondAdjustApplyTask(@Valid UserApplyVo userApplyVo){
		try{
			bondApplyService.rejectBondAdjustApplyTask(userApplyVo.getId(),userApplyVo.getTaskId(),userApplyVo.getContent());
			return Result.ok();
		}catch (Exception e){
			logger.error(">>>>>>>>>>>>>>rejectBondAdjustApplyTask e:{}",e);
			return Result.fail("审核失败！");
		}
	}

}
