| | |
| | | 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(); |
| | |
| | | seCardOperate.setClientId(clientId); |
| | | seCardOperate.setMoney(po.getBalance()); |
| | | seCardOperate.setRefundAmount(po.getSupplementMoney()); |
| | | seCardOperate.setOperateType(OperateTypeENUM.WRITE_BACK.getCode()); |
| | | seCardOperate.setOperateType(OperateTypeENUM.SUPPLEMENT.getCode()); |
| | | seCardOperate.setRemarks(po.getRemarks()); |
| | | seCardOperate.setOperator(po.getOperator()); |
| | | seCardOperate.setOperateDt(operateTime); |
| | |
| | | Integer operateType = po.getOperateType(); |
| | | String orderNumber = po.getOrderNumber(); |
| | | |
| | | // 先检查是否为管理卡 |
| | | if (operateType.equals(OperateTypeENUM.MANAGEMENT_CARD_WRITE.getCode().intValue())) { |
| | | // 管理类型卡写卡逻辑 |
| | | return handleManagementCardWrite(cardAddr, orderNumber); |
| | | } |
| | | |
| | | // 处理农户卡逻辑 |
| | | Long cardId = seClientCardMapper.getCardIdByAddr(cardAddr); |
| | | if (cardId == null || cardId.equals(0)) { |
| | | map.put("msg", "您指定的水卡不存在"); |
| | | return map; |
| | | } |
| | | |
| | | if (operateType == 1) { |
| | | if (operateType.equals(OperateTypeENUM.ACTIVE.getCode().intValue())) { |
| | | /** |
| | | * 开卡操作执行通知 |
| | | * 1.依据订单号将无效状态的操作记录改为有效 |
| | |
| | | turnRechargeHistoryValidByOrderNumber(orderNumber); |
| | | updateCard(cardId, orderNumber + "p"); |
| | | } |
| | | } else if (operateType == 2) { |
| | | } else if (operateType.equals(OperateTypeENUM.RECHARGE.getCode().intValue())) { |
| | | /** |
| | | * 充值操作执行通知 |
| | | * 1. 操作记录改为有效 |
| | |
| | | turnOperateValidByOrderNumber(orderNumber + "p"); |
| | | turnRechargeHistoryValidByOrderNumber(orderNumber); |
| | | updateCard(cardId, orderNumber + "p"); |
| | | } else if (operateType == 3) { |
| | | } else if (operateType.equals(OperateTypeENUM.CANCEL.getCode().intValue())) { |
| | | /** |
| | | * 销卡操作执行通知 |
| | | * 1. 操作记录改为有效 |
| | |
| | | return map; |
| | | } |
| | | |
| | | } else if (operateType == 4) { |
| | | } else if (operateType.equals(OperateTypeENUM.REISSUE.getCode().intValue())) { |
| | | /** |
| | | * 补卡操作执行通知 |
| | | * 1. 新水卡记录改为有效 |
| | |
| | | map.put("msg", "补卡回调失败"); |
| | | return map; |
| | | } |
| | | } else if (operateType == 5) { |
| | | } else if (operateType.equals(OperateTypeENUM.REFUND.getCode().intValue())) { |
| | | /** |
| | | * 补扣操作执行通知 |
| | | * 1. 操作记录改为有效 |
| | |
| | | map.put("msg", "补扣回调失败"); |
| | | return map; |
| | | } |
| | | } else if (operateType == 6) { |
| | | } else if (operateType.equals(OperateTypeENUM.SUPPLEMENT.getCode().intValue())) { |
| | | /** |
| | | * 返还操作执行通知 |
| | | * 1. 操作记录改为有效 |
| | |
| | | |
| | | map.put("success", true); |
| | | map.put("msg", "操作成功"); |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 处理管理类型卡写卡回调 |
| | | * |
| | | * @param cardAddr 卡地址 |
| | | * @param orderNumber 订单号 |
| | | * @return 处理结果 |
| | | */ |
| | | private Map<String, Object> handleManagementCardWrite(String cardAddr, String orderNumber) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("success", false); |
| | | map.put("content", null); |
| | | |
| | | try { |
| | | // 根据卡地址和订单号查找管理卡 |
| | | SeManagementCard managementCard = seManagementCardMapper.selectOne( |
| | | com.baomidou.mybatisplus.core.toolkit.Wrappers.<SeManagementCard>lambdaQuery() |
| | | .eq(SeManagementCard::getCardAddr, cardAddr) |
| | | .eq(SeManagementCard::getOrderNo, orderNumber)); |
| | | |
| | | if (managementCard == null) { |
| | | map.put("msg", "未找到对应的管理卡记录"); |
| | | return map; |
| | | } |
| | | |
| | | // 更新管理卡状态为正常 |
| | | managementCard.setState(ManagementCardStateENUM.NORMAL.getCode()); |
| | | |
| | | int updateResult = seManagementCardMapper.updateByPrimaryKeySelective(managementCard); |
| | | if (updateResult > 0) { |
| | | map.put("success", true); |
| | | map.put("msg", "管理卡写卡完成,状态已更新为正常"); |
| | | } else { |
| | | map.put("msg", "管理卡状态更新失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("处理管理卡写卡回调异常", e); |
| | | map.put("msg", "处理管理卡写卡回调时发生异常:" + e.getMessage()); |
| | | } |
| | | |
| | | return map; |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | } |