package com.fjhx.sale.controller.contract;

import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
import com.fjhx.purchase.entity.purchase.po.Purchase;
import com.fjhx.sale.entity.contract.dto.ContractDto;
import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
import com.fjhx.sale.entity.contract.po.Contract;
import com.fjhx.sale.entity.contract.vo.*;
import com.fjhx.sale.service.contract.ContractService;
import com.ruoyi.common.core.domain.BaseSelectDto;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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


/**
 * <p>
 * 外销合同表 前端控制器
 * </p>
 *
 * @author
 * @since 2023-04-17
 */
@RestController
@RequestMapping("/contract")
public class ContractController {

    @Autowired
    private ContractService contractService;

    /**
     * 外销合同表分页
     */
    @PostMapping("/page")
    public Page<ContractVo> page(@RequestBody ContractSelectDto dto) {
        return contractService.getPage(dto);
    }

    /**
     * 外销合同与样品单合并分页
     */
    @PostMapping("/contractAndSamplePage")
    public Page<ContractVo> getContractAndSamplePage(@RequestBody ContractSelectDto dto) {
        return contractService.getContractAndSamplePage(dto);
    }

    /**
     * 外销合同表分页 不过滤权限
     */
    @PostMapping("/page1")
    public Page<ContractVo> page1(@RequestBody ContractSelectDto dto) {
        return contractService.getPage1(dto);
    }

    /**
     * 外销合同表明细
     */
    @PostMapping("/detail")
    public ContractVo detail(@RequestBody BaseSelectDto dto) {
        return contractService.detail(dto.getId());
    }

    /**
     * 外销合同表新增
     */
    @PostMapping("/add")
    public void add(@RequestBody ContractDto contractDto) {
        contractService.add(contractDto);
    }

    /**
     * 外销合同表编辑
     */
    @PostMapping("/edit")
    public void edit(@RequestBody ContractDto contractDto) {
        contractService.edit(contractDto);
    }

    /**
     * 外销合同表删除
     */
    @PostMapping("/delete")
    public void delete(@RequestBody BaseSelectDto dto) {
        contractService.delete(dto.getId());
    }

    /**
     * 根据客户ID查询未包装的订单
     */
    @GetMapping("/getNoPackContractByCustomerId")
    public List<ContractVo> getNoPackContractByCustomerId(@RequestParam("customerId") String customerId) {
        return contractService.getNoPackContractByCustomerId(customerId);
    }

    /**
     * 根据合同id集合查询合同列表
     */
    @PostMapping("/getByIds")
    public List<Contract> getByIds(@RequestBody List<Long> ids) {
        return contractService.getByIds(ids);
    }

    /**
     * 销售合同pdf
     */
    @PostMapping("/getContractPdfInfo")
    public ContractPdfInfoVo getContractPdfInfo(@RequestBody ContractDto dto) {
        Long id;
        if(StringUtils.isNotEmpty(dto.getCode())){
            Contract contract = contractService.getOne(Wrappers.<Contract>query().lambda().eq(Contract::getCode,dto.getCode()).last("limit 1"));
            id = ObjectUtils.isEmpty(contract)?0:contract.getId();
        }else{
            id = dto.getId();
        }
        return contractService.getContractPdfInfo(id);
    }

    /**
     * 销售趋势（数据看板-产品分析页面）
     *
     * @param productInfoDto
     */
    @PostMapping("/saleTrend")
    public List<Map<String, Object>> saleTrend(@RequestBody ProductInfoSelectDto productInfoDto) {
        return contractService.saleTrend(productInfoDto);
    }

    /**
     * 销售统计(数据看板-销售分析页面开发)
     */
    @PostMapping("/salesStatistics")
    public Map<String, Object> salesStatistics(@RequestBody ContractDto dto) {
        return contractService.salesStatistics(dto);
    }


    /**
     * 国家销售统计(数据看板-销售分析页面开发)
     */
    @PostMapping("/countrySalesStatistics")
    public List<ContractDto> countrySalesStatistics(@RequestBody ContractDto dto) {
        return contractService.countrySalesStatistics(dto);
    }

    /**
     * 客户销售统计(数据看板-销售分析页面开发)
     */
    @PostMapping("/customSalesStatistics")
    public List<ContractDto> customSalesStatistics(@RequestBody ContractDto dto) {
        return contractService.customSalesStatistics(dto);
    }

    /**
     * 业务员销售统计(数据看板-销售分析页面开发)
     */
    @PostMapping("/salesmanSalesStatistics")
    public List<ContractDto> salesmanSalesStatistics(@RequestBody ContractDto dto) {
        return contractService.salesmanSalesStatistics(dto);
    }

    /**
     * 产品销售额统计(数据看板-销售分析页面开发)
     */
    @PostMapping("/productSalesStatistics")
    public List<ContractDto> productSalesStatistics(@RequestBody ContractDto dto) {
        return contractService.productSalesStatistics(dto);
    }

    /**
     * 产品销售量统计(数据看板-销售分析页面开发)
     */
    @PostMapping("/salesVolumeStatistics")
    public List<ContractDto> salesVolumeStatistics(@RequestBody ContractDto dto) {
        return contractService.salesVolumeStatistics(dto);
    }

    /**
     * 合同交接单
     */
    @PostMapping("/contractHandover")
    public void contractHandover(@RequestBody ContractDto dto) {
        contractService.contractHandover(dto);
    }

    /**
     * 合同销售统计（合同列表）
     */
    @PostMapping("/covenantStatistics")
    public Map<String, Object> covenantStatistics(@RequestBody ContractDto dto) {
        return contractService.covenantStatistics(dto);
    }

    /**
     * 利润预算
     */
    @PostMapping("/getProfitBudgetPage")
    public Page<ContractBudgetVo> getProfitBudgetPage(@RequestBody ContractSelectDto dto) {
        return contractService.getProfitBudgetPage(dto);
    }

    /**
     * 利润结算
     */
    @PostMapping("/getProfitClearingPage")
    public Page<ContractBudgetVo> getProfitClearingPage(@RequestBody ContractSelectDto dto) {
        return contractService.getProfitClearingPage(dto);
    }

    /**
     * 销售合同-》到账完成
     */
    @PostMapping("/toTheAccount")
    public void toTheAccount(@RequestBody Contract dto) {
        contractService.toTheAccount(dto);
    }

    /**
     * 决策辅助
     */
    @PostMapping("/decisionAid")
    public DecisionAidVo decisionAid(@RequestBody DecisionAidDto dto) {
        return contractService.decisionAid(dto);
    }

    /**
     * 采购付款决策辅助
     */
    @PostMapping("/payDecisionAid")
    public PayDecisionAidVo payDecisionAid(@RequestBody PayDecisionAidDto dto) {
        return contractService.payDecisionAid(dto);
    }

    /**
     * 获取合同相关的所有版本列表
     */
    @PostMapping("/getVersionList")
    public List<ContractVo> getVersionList(@RequestBody ContractDto dto) {
        return contractService.getVersionList(dto.getId());
    }

    /**
     * 获取合同相关的所有版本列表
     */
    @PostMapping("/getPurchaseListByContractId")
    public List<Purchase> getPurchaseListByContractId(@RequestBody ContractDto dto) {
        return contractService.getPurchaseListByContractId(dto.getId());
    }

    /**
     * 根据合同id获取合同的资金流水信息
     */
    @PostMapping("/getAccountRunningWaterByContractId")
    public List<AccountRunningWaterVo> getAccountRunningWaterByContractId(@RequestBody ContractDto dto) {
        return contractService.getAccountRunningWaterByContractId(dto.getId());
    }

    /**
     * 根据合同id获取合同的资金流水信息
     */
    @PostMapping("/111")
    public void tt111(@RequestBody ContractDto dto) {
        dto.setCreateUser(133333333333333L);
        contractService.save(dto);
    }

}
