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 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 params = (Map) PojoUtils.generalize(vo) ; /** * 根据收银员编号、交易日期查询汇总记录 * 遍历汇总记录查询结果,计算笔数合计、实收金额合计、赠送金额合计、返还金额合计 */ List 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; } }