package com.example.his.api.mis.service;

import cn.hutool.core.map.MapUtil;
import com.example.his.api.db.dao.OrderDao;
import com.example.his.api.front.service.PaymentService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

@Service("MisOrderService")
public class OrderService {
    @Resource
    private OrderDao orderDao;

    @Resource
    private PaymentService paymentService;

    /**
     * 查询订单记录
     * @param param
     * @return
     */
    public PageInfo<HashMap> searchMisOrderByPage(Map param) {
        PageHelper.startPage(MapUtil.getInt(param, "pageNum"), MapUtil.getInt(param, "pageSize"));
        ArrayList<HashMap> list = orderDao.searchMisOrderByPage(param);
        PageInfo<HashMap> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 同步付款结果
     * @param list
     * @return
     */
    public AtomicInteger checkPaymentResult(ArrayList<String> list) {
        AtomicInteger count = new AtomicInteger();
        list.forEach(outTradeNo -> {
            String transactionId = paymentService.searchPaymentResult(outTradeNo);
            if(transactionId != null) {
                int rows = orderDao.updatePaymentStatus(new HashMap() {{
                    put("transactionId", transactionId);
                    put("outTradeNo", outTradeNo);
                }});
                count.addAndGet(rows);
            }
        });
        return count;
    }

    /**
     *
     * 删除已关闭的订单
     * @param id
     * @return
     */
    public int deleteOrderById(int id) {
        int rows = orderDao.deleteOrderById(id);
        return rows;
    }

    /**
     * 线下退款
     * @param outTradeNo
     * @return
     */
    public int updateOnlineRefundStatus(String outTradeNo) {
        int rows = orderDao.updateOnlineRefundStatus(outTradeNo);
        return rows;
    }

}
