package org.springblade.command.feign;

import org.springblade.command.pojo.entity.*;
import org.springblade.command.pojo.vo.FzyjFkVO;
import org.springblade.command.pojo.vo.FzyjVO;
import org.springblade.command.pojo.vo.FzyjYjVO;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

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

@FeignClient(
	//定义Feign指向的service-id
	value = CommonConstant.APPLICATION_COMMAND_NAME
)
public interface FzyjClient {

	/**
	 * 接口前缀
	 */
	String API_PREFIX = "/api/fzyj";

	/**
	 * 获取列表
	 *
	 * @param params
	 * @return
	 */
	@PostMapping(API_PREFIX + "/pageByUser")
	R pageByDept(@RequestParam Map<String, Object> params, Query query);

	/**
	 * 根据syncId查询预警详情
	 *
	 * @param syncId
	 * @return
	 */
	@PostMapping(API_PREFIX + "/detail")
	R detail(@RequestParam Long syncId);

	/**
	 * 根据SyncId获取反馈信息
	 * @param SyncId
	 * @return FzyjFkEntity
	 */
	@PostMapping(API_PREFIX + "/getFkBySyncId")
	R<FzyjFkEntity> getFkBySyncId(@RequestParam Long SyncId);

	/**
	 * 根据userId查询指令数量
	 *
	 * @param
	 * @return int
	 */
	@PostMapping(API_PREFIX + "/countByUserId")
	int countByUserId();

	/**
	 * 根据deptId查询指令数量
	 *
	 * @param
	 * @return int
	 */
	@PostMapping(API_PREFIX + "/countByDept")
	int countByDept();

	/**
	 * 根据userId查询已签收数量
	 *
	 * @param
	 * @return int
	 */
	@PostMapping(API_PREFIX + "/countYqsByUserId")
	int countYqsByUserId();

	/**
	 * 根据deptId查询已签收数量
	 *
	 * @param
	 * @return int
	 */
	@PostMapping(API_PREFIX + "/countYqsByDept")
	int countYqsByDept();

	/**
	 * 根据userId查询已反馈数量
	 *
	 * @param
	 * @return int
	 */
	@PostMapping(API_PREFIX + "/countYfkByUserId")
	int countYfkByUserId();

	/**
	 * 根据deptId查询已反馈数量
	 *
	 * @param
	 * @return int
	 */
	@PostMapping(API_PREFIX + "/countYfkByDept")
	int countYfkByDept();

	/**
	 * 移交
	 * @param fzyjYjEntity
	 * @return boolean
	 */
	@PostMapping(API_PREFIX + "/yj")
	R yj(@RequestBody FzyjYjEntity fzyjYjEntity);

	/**
	 * 指派
	 * @param fzyjUserEntity
	 * @return boolean
	 */
	@PostMapping(API_PREFIX + "/zp")
    R zp(@RequestBody FzyjUserEntity fzyjUserEntity);

	/**
	 * 更新反馈
	 * @param fzyjFkEntity
	 * @return R
	 */
	@PostMapping(API_PREFIX + "/updateFkBySyncId")
	R updateFkBySyncId(@RequestBody FzyjFkEntity fzyjFkEntity);

	/**
	 * 保存反馈
	 * @param fzyjFkEntity
	 * @return R
	 */
	@PostMapping(API_PREFIX + "/saveFk")
	R saveFk(@RequestBody FzyjFkEntity fzyjFkEntity);

	/**
	 * 新增或更新受害人信息
	 * @param shrList
	 * @return
	 */
	@PostMapping(API_PREFIX + "/saveOrUpdateShr")
	void saveOrUpdateShr(@RequestBody List<FzyjShrEntity> shrList);

	/**
	 * 获取未推送过的预警
	 * @return FzyjVO
	 */
	@PostMapping(API_PREFIX + "/getUnpushedFzyj")
	R<List<FzyjVO>> getUnpushedFzyj();

	/**
	 * 获取未推送过的预警
	 * @return FzyjVO
	 */
	@PostMapping(API_PREFIX + "/getUnpushedZp")
	R<List<FzyjVO>> getUnpushedZp();

	/**
	 * 将预警状态修改为已推送
	 * param syncId
	 * @return FzyjVO
	 */
	@PostMapping(API_PREFIX + "/updatePushStatus")
	boolean updatePushStatus(@RequestParam Long syncId);

	/**
	 * 将预警状态修改为已推送
	 * param syncId
	 * @return FzyjVO
	 */
	@PostMapping(API_PREFIX + "/updateZpPushStatus")
	boolean updateZpPushStatus(@RequestParam Long syncId);

	/**
	 * 新增附件
	 * param fzyjFjEntity
	 * @return FzyjVO
	 */
	@PostMapping(API_PREFIX + "/saveFj")
	boolean saveFj(@RequestBody FzyjFjEntity fzyjFjEntity);

	/**
	 * 反馈回写
	 * param fzyjFkVO
	 */
	@PostMapping(API_PREFIX + "/feedbackUrgentRisks")
	void feedbackUrgentRisks(@RequestBody FzyjFkVO fzyjFkVO);

	/**
	 * 附件文件上传
	 * param fzyjFjEntity
	 */
	@PostMapping(API_PREFIX + "/fileupload")
	String fileupload(@RequestBody FzyjFjEntity fzyjFjEntity);

	/**
	 * 移交或指派高危预警
	 * param fzyjFkVO
	 */
	@PostMapping(API_PREFIX + "/dealUrgentRisks")
    void dealUrgentRisks(@RequestBody FzyjYjVO fzyjYjVO);
}
