package com.dy.pipIrrTerminal.general; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
import com.alibaba.fastjson2.JSONArray; 
 | 
import com.alibaba.fastjson2.JSONObject; 
 | 
import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper; 
 | 
import com.dy.pipIrrGlobal.daoSe.SePaymentMethodMapper; 
 | 
import com.dy.pipIrrGlobal.pojoSe.SePaymentMethod; 
 | 
import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics; 
 | 
import com.dy.pipIrrTerminal.general.qo.QoSummary; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.dubbo.common.utils.PojoUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.text.DecimalFormat; 
 | 
import java.text.ParseException; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.*; 
 | 
  
 | 
/** 
 | 
 * @author ZhuBaoMin 
 | 
 * @date 2025-06-25 11:22 
 | 
 * @LastEditTime 2025-06-25 11:22 
 | 
 * @Description 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class GeneralSv { 
 | 
    @Autowired 
 | 
    private SeGeneralMapper seGeneralMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SePaymentMethodMapper sePaymentMethodMapper; 
 | 
  
 | 
    /** 
 | 
     * 充值机用获取交易统计记录 
 | 
     * @param vo 
 | 
     * @return 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public Map getSummaries(QoSummary vo) throws ParseException { 
 | 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
  
 | 
        Integer pageSize = vo.getPageSize(); 
 | 
        Integer pageCurr = vo.getPageCurr(); 
 | 
        // 起始索引位置 
 | 
        Integer startIndex = (pageCurr - 1) * pageSize; 
 | 
  
 | 
        // 获取各支付方式ID 
 | 
        Long paymentId_cash = 0L; 
 | 
        Long paymentId_pos = 0L; 
 | 
        Long paymentId_transfer = 0L; 
 | 
        List<SePaymentMethod> list_payment = sePaymentMethodMapper.getPaymentMethods(); 
 | 
        for (int i = 0; i < list_payment.size(); i++) { 
 | 
            SePaymentMethod paymentMethod = list_payment.get(i); 
 | 
            if(paymentMethod.getName().equals("现金")) { 
 | 
                paymentId_cash = paymentMethod.getId(); 
 | 
            } 
 | 
            if(paymentMethod.getName().equals("POS机")) { 
 | 
                paymentId_pos = paymentMethod.getId(); 
 | 
            } 
 | 
            if(paymentMethod.getName().equals("银行转账")) { 
 | 
                paymentId_transfer = paymentMethod.getId(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        // 接收传入参数:交易起止日期、收银员ID 
 | 
        JSONArray array_paymentSums = new JSONArray(); 
 | 
        Date timeStart = dateFormat.parse(vo.getTimeStart()); 
 | 
        Date timeStop = dateFormat.parse(vo.getTimeStop()); 
 | 
        Long cashierId = vo.cashierId; 
 | 
  
 | 
        Calendar calendar = Calendar.getInstance(); 
 | 
        calendar.setTime(timeStart); 
 | 
        while (calendar.getTime().before(timeStop) || calendar.getTime().equals(timeStop)) { 
 | 
            String tradeDate = dateFormat.format(calendar.getTime()) ; 
 | 
            Float receivedCash = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, paymentId_cash)).orElse(0f); 
 | 
            Float receivedPos = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,paymentId_pos)).orElse(0f); 
 | 
            Float receivedTransfer = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, paymentId_transfer)).orElse(0f); 
 | 
  
 | 
            JSONObject job = new JSONObject(); 
 | 
            job.put("tradeDate", tradeDate); 
 | 
            job.put("receivedCash", receivedCash); 
 | 
            job.put("receivedPos", receivedPos); 
 | 
            job.put("receivedTransfer", receivedTransfer); 
 | 
            array_paymentSums.add(job); 
 | 
            calendar.add(Calendar.DAY_OF_MONTH, 1); 
 | 
        } 
 | 
  
 | 
        // 生成查询参数 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ; 
 | 
  
 | 
        /** 
 | 
         * 根据收银员编号、交易日期查询汇总记录 
 | 
         * 遍历汇总记录查询结果,计算笔数合计、实收金额合计、赠送金额合计、返还金额合计 
 | 
         */ 
 | 
        List<VoTransactionStatistics> list = Optional.ofNullable(seGeneralMapper.getSummaries(params)).orElse(new ArrayList<>()); 
 | 
        if(list.size() == 0) { 
 | 
            return new HashMap(); 
 | 
        } 
 | 
  
 | 
        Integer totalCount = 0; 
 | 
        Float totalReceived = 0f; 
 | 
        Float totalGift = 0f; 
 | 
        Float totalRefund = 0f; 
 | 
        JSONArray array= JSONArray.parseArray(JSON.toJSONString(list)); 
 | 
        for(int i = 0; i < array.size(); i++) { 
 | 
            JSONObject job_summary = array.getJSONObject(i); 
 | 
            totalCount = totalCount +  Optional.ofNullable(job_summary.getInteger("count")).orElse(0); 
 | 
            totalReceived = totalReceived + Optional.ofNullable(job_summary.getFloat("received")).orElse(0f); 
 | 
            totalGift = totalGift + Optional.ofNullable(job_summary.getFloat("gift")).orElse(0f); 
 | 
            totalRefund = totalRefund + Optional.ofNullable(job_summary.getFloat("refundAmount")).orElse(0f); 
 | 
        } 
 | 
  
 | 
        Map map_result = new HashMap(); 
 | 
        map_result.put("totalCount", totalCount); 
 | 
        map_result.put("totalReceived", totalReceived); 
 | 
        map_result.put("totalGift", totalGift); 
 | 
        map_result.put("totalRefund", totalRefund); 
 | 
  
 | 
        // 分页格式组装记录列表 
 | 
        Map map_record = new HashMap(); 
 | 
        map_record.put("itemTotal", list.size()); 
 | 
        map_record.put("pageCurr", pageCurr); 
 | 
        map_record.put("pageSize", pageSize); 
 | 
        map_record.put("pageTotal", (int)Math.ceil((double)list.size() / pageSize)); 
 | 
        JSONArray array_record = (JSONArray) JSON.toJSON(list); 
 | 
        JSONArray array_record_page = (JSONArray)JSON.toJSON(array_record.subList(startIndex, Math.min(startIndex + pageSize, array_record.size()))); 
 | 
        map_record.put("list", array_record_page); 
 | 
  
 | 
        // 分页格式组装支付方式列表 
 | 
        Map map_paymentSums = new HashMap(); 
 | 
        map_paymentSums.put("itemTotal", array_paymentSums.size()); 
 | 
        map_paymentSums.put("pageCurr", pageCurr); 
 | 
        map_paymentSums.put("pageSize", pageSize); 
 | 
        map_paymentSums.put("pageTotal", (int)Math.ceil((double)array_paymentSums.size() / pageSize)); 
 | 
        JSONArray array_paymentSums_page = (JSONArray) JSON.toJSON(array_paymentSums.subList(startIndex, Math.min(startIndex + pageSize, array_paymentSums.size()))); 
 | 
        map_paymentSums.put("list", array_paymentSums_page); 
 | 
  
 | 
  
 | 
        map_result.put("records", map_record); 
 | 
        map_result.put("paymentSums", map_paymentSums); 
 | 
  
 | 
        return map_result; 
 | 
    } 
 | 
} 
 |