|  |  |  | 
|---|
|  |  |  | package com.dy.pipIrrTerminal.card; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson2.JSON; | 
|---|
|  |  |  | import com.alibaba.fastjson2.JSONArray; | 
|---|
|  |  |  | import com.alibaba.fastjson2.JSONObject; | 
|---|
|  |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
|---|
|  |  |  | import com.dy.common.webUtil.QueryResultVo; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.dy.pipIrrTerminal.card.enums.ManagementCardStateENUM; | 
|---|
|  |  |  | import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM; | 
|---|
|  |  |  | import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM; | 
|---|
|  |  |  | import com.dy.pipIrrTerminal.card.qo.QoTransaction; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.apache.dubbo.common.utils.PojoUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import com.dy.common.util.IDLongGenerator; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.text.DecimalFormat; | 
|---|
|  |  |  | import java.time.LocalDateTime; | 
|---|
|  |  |  | import java.time.format.DateTimeFormatter; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum)).orElse(0f); | 
|---|
|  |  |  | Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum, null)).orElse(0f); | 
|---|
|  |  |  | Double waterPrice = prWaterPriceMapper.getPrice(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | VoTermActiveCard voTermActiveCard = new VoTermActiveCard(); | 
|---|
|  |  |  | 
|---|
|  |  |  | Long totalCount = seClientCardMapper.checkCardAddrExists(cardAddr); | 
|---|
|  |  |  | return totalCount != null && totalCount > 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据指定条件获取交易记录 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param vo | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public Map getTransactions(QoTransaction vo) { | 
|---|
|  |  |  | DecimalFormat df = new DecimalFormat("0.00"); | 
|---|
|  |  |  | // 补齐查询时间 | 
|---|
|  |  |  | String operateTimeStart = vo.operateTimeStart; | 
|---|
|  |  |  | String operateTimeStop = vo.operateTimeStop; | 
|---|
|  |  |  | if (operateTimeStart != null) { | 
|---|
|  |  |  | operateTimeStart = operateTimeStart + " 00:00:00"; | 
|---|
|  |  |  | vo.setOperateTimeStart(operateTimeStart); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (operateTimeStop != null) { | 
|---|
|  |  |  | operateTimeStop = operateTimeStop + " 23:59:59"; | 
|---|
|  |  |  | vo.setOperateTimeStop(operateTimeStop); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 生成查询参数 | 
|---|
|  |  |  | Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取符合条件的记录数 | 
|---|
|  |  |  | Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>(); | 
|---|
|  |  |  | rsVo.pageSize = vo.pageSize; | 
|---|
|  |  |  | rsVo.pageCurr = vo.pageCurr; | 
|---|
|  |  |  | rsVo.calculateAndSet(itemTotal, params); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | rsVo.obj = seCardOperateMapper.getTransactions(params); | 
|---|
|  |  |  | List<VoTradeDetails> list = rsVo.obj; | 
|---|
|  |  |  | if (list.size() == 0) { | 
|---|
|  |  |  | return new HashMap(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //元谋一期陆常丽需求把赠送金额与充值金额分开显示 | 
|---|
|  |  |  | for (int i = list.size()-1; i >= 0 ; i--) { | 
|---|
|  |  |  | Optional.ofNullable(list.get(i).getGift()).orElse(0d); | 
|---|
|  |  |  | if (!list.get(i).getGift().equals(0d)){ | 
|---|
|  |  |  | Double gift1 = list.get(i).getGift();//赠送金额 | 
|---|
|  |  |  | String districtTitle = list.get(i).getDistrictTitle();//地址 | 
|---|
|  |  |  | String clientNum = list.get(i).getClientNum();//农户编号 | 
|---|
|  |  |  | String clientName = list.get(i).getClientName();//农户姓名 | 
|---|
|  |  |  | String phone = list.get(i).getPhone();//手机号 | 
|---|
|  |  |  | Date tradeTime = list.get(i).getTradeTime();//交易时间 | 
|---|
|  |  |  | String orderNumber = list.get(i).getOrderNumber();//订单编号 | 
|---|
|  |  |  | String cardNum = list.get(i).getCardNum();//卡编号 | 
|---|
|  |  |  | String idCard = list.get(i).getIdCard();//身份证 | 
|---|
|  |  |  | String cashierName = list.get(i).getCashierName();//操作人 | 
|---|
|  |  |  | Double money = list.get(i).getMoney();//余额 | 
|---|
|  |  |  | Double cardCost1 = list.get(i).getCardCost();//购卡金额 | 
|---|
|  |  |  | Double tradeAmount = list.get(i).getTradeAmount();//交易金额 | 
|---|
|  |  |  | Double waterCost1 = list.get(i).getWaterCost();//购水金额 | 
|---|
|  |  |  | Double refundAmount1 = list.get(i).getRefundAmount();//返回金额 | 
|---|
|  |  |  | String paymentName = list.get(i).getPaymentName();//支付方式 | 
|---|
|  |  |  | String operateType = list.get(i).getOperateType();//业务类型 | 
|---|
|  |  |  | String cardState = list.get(i).getCardState();//卡状态 | 
|---|
|  |  |  | Long villageId = list.get(i).getVillageId();//村id | 
|---|
|  |  |  | Long cashierId = list.get(i).getCashierId();//收银员id | 
|---|
|  |  |  |  | 
|---|
|  |  |  | list.get(i).setGift(0d); | 
|---|
|  |  |  | list.get(i).setMoney(money-gift1); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | VoTradeDetails voTradeDetail = new VoTradeDetails(); | 
|---|
|  |  |  | voTradeDetail.setDistrictTitle(districtTitle);//2 | 
|---|
|  |  |  | voTradeDetail.setClientNum(clientNum);//2 | 
|---|
|  |  |  | voTradeDetail.setClientName(clientName);//2 | 
|---|
|  |  |  | voTradeDetail.setPhone(phone);//2 | 
|---|
|  |  |  | voTradeDetail.setOperateType("赠送");//2 | 
|---|
|  |  |  | voTradeDetail.setTradeTime(tradeTime);//2 | 
|---|
|  |  |  | voTradeDetail.setWaterCost(0d);//2 | 
|---|
|  |  |  | voTradeDetail.setCardCost(0d);//2 | 
|---|
|  |  |  | voTradeDetail.setGift(gift1);//2 | 
|---|
|  |  |  | voTradeDetail.setTradeAmount(0d);//2 | 
|---|
|  |  |  | voTradeDetail.setRefundAmount(refundAmount1);//2 | 
|---|
|  |  |  | voTradeDetail.setMoney(money);//待2 | 
|---|
|  |  |  | voTradeDetail.setPaymentName("赠送");//2 | 
|---|
|  |  |  | voTradeDetail.setOrderNumber(orderNumber);//2 | 
|---|
|  |  |  | voTradeDetail.setCardNum(cardNum);//2 | 
|---|
|  |  |  | voTradeDetail.setIdCard(idCard);//2 | 
|---|
|  |  |  | voTradeDetail.setCashierName(cashierName);//2 | 
|---|
|  |  |  | voTradeDetail.setCashierId(cashierId);//2 | 
|---|
|  |  |  | voTradeDetail.setCardState(cardState);//2 | 
|---|
|  |  |  | voTradeDetail.setVillageId(villageId);//2 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | list.add(voTradeDetail); | 
|---|
|  |  |  | itemTotal = itemTotal + 1; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | list.sort(Comparator.comparing(VoTradeDetails::getTradeTime)); | 
|---|
|  |  |  | rsVo.obj = list; | 
|---|
|  |  |  | rsVo.calculateAndSet(itemTotal, params); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 遍历交易明细记录,汇总购水金额、购卡金额 | 
|---|
|  |  |  | Double totalWaterCost = 0.0; | 
|---|
|  |  |  | Double totalCardCost = 0.0; | 
|---|
|  |  |  | Double totalGift = 0.0; | 
|---|
|  |  |  | Double totalRefund = 0.0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | JSONArray array = JSONArray.parseArray(JSON.toJSONString(list)); | 
|---|
|  |  |  | for (int i = 0; i < array.size(); i++) { | 
|---|
|  |  |  | JSONObject job = array.getJSONObject(i); | 
|---|
|  |  |  | Double waterCost = Optional.ofNullable(job.getDouble("waterCost")).orElse(0.0); | 
|---|
|  |  |  | Double cardCost = Optional.ofNullable(job.getDouble("cardCost")).orElse(0.0); | 
|---|
|  |  |  | Double gift = Optional.ofNullable(job.getDouble("gift")).orElse(0.0); | 
|---|
|  |  |  | Double refundAmount = Optional.ofNullable(job.getDouble("refundAmount")).orElse(0.0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | totalWaterCost = totalWaterCost + waterCost; | 
|---|
|  |  |  | totalCardCost = totalCardCost + cardCost; | 
|---|
|  |  |  | totalGift = totalGift + gift; | 
|---|
|  |  |  | totalRefund = totalRefund + refundAmount; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Map map_record = new HashMap(); | 
|---|
|  |  |  | map_record.put("list", rsVo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Map map_result = new HashMap(); | 
|---|
|  |  |  | map_result.put("waterCost", df.format(totalWaterCost)); | 
|---|
|  |  |  | map_result.put("cardCost", df.format(totalCardCost)); | 
|---|
|  |  |  | map_result.put("gift", df.format(totalGift)); | 
|---|
|  |  |  | map_result.put("refund", df.format(totalRefund)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | map_result.put("records", map_record); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return map_result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据水卡编号或水卡地址获取操作记录及余额 | 
|---|
|  |  |  | * @param cardNum | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public Map getOperateRecordsAndMoney(Long cardNum, String cardAddr) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<Map<String, Object>> list = Optional.ofNullable(seClientCardMapper.getOperateRecordsByCardNum(cardNum, cardAddr)).orElse(new ArrayList<>()); | 
|---|
|  |  |  | Float mondy = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum, cardAddr)).orElse(0f); | 
|---|
|  |  |  | Float amount = Optional.ofNullable(seClientCardMapper.sumRechargeByCardNum(cardNum, cardAddr)).orElse(0f); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Map map = new HashMap(); | 
|---|
|  |  |  | map.put("mondy", mondy); | 
|---|
|  |  |  | map.put("amount", amount); | 
|---|
|  |  |  | map.put("list", list); | 
|---|
|  |  |  | return map; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|