package com.dy.pipIrrSell.cardOperate; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveHistoryMapper; import com.dy.pipIrrGlobal.daoSe.*; import com.dy.pipIrrGlobal.pojoSe.SeCardOperate; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.pojoSe.SeManagerCard; import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory; import com.dy.pipIrrGlobal.voRm.VoExpend; import com.dy.pipIrrGlobal.voSe.*; import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge; import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM; import com.dy.pipIrrSell.cardOperate.qo.*; import com.dy.pipIrrSell.clientCard.CardStateENUM; import com.dy.pipIrrSell.clientCard.ClientCardSv; import com.dy.pipIrrSell.clientCard.LastOperateENUM; import com.dy.pipIrrSell.result.SellResultCode; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.time.Duration; import java.util.*; /** * @author ZhuBaoMin * @date 2024-01-18 19:36 * @LastEditTime 2024-01-18 19:36 * @Description */ @Slf4j @Service public class CardOperateSv { @Autowired private SeCardOperateMapper seCardOperateMapper; @Autowired private SeClientCardMapper seClientCardMapper; @Autowired private SeClientMapper seClientMapper; @Autowired private ClientCardSv clientCardSv; @Autowired private SeGeneralMapper seGeneralMapper; @Autowired private BaSettingsMapper baSettingsMapper; @Autowired private SeManagerCardMapper seManagerCardMapper; @Autowired private SePaymentMethodMapper sePaymentMethodMapper; @Autowired private SeRechargeHistoryMapper seRechargeHistoryMapper; @Autowired private RmOpenCloseValveHistoryMapper rmOpenCloseValveHistoryMapper; @Value("${project.projectNo}") private Integer projectNo; /** * 添加开卡记录 * * @param po 水卡操作对象 * @return 开卡记录主键 */ public Long activeCard(SeCardOperate po) { seCardOperateMapper.insert(po); return po.getId(); } /** * 根据农户编号获取5级行政区划代码,开卡使用 * * @param clientNum 农户编号 * @return 5级行政区划代码 */ public String getAreaCodeByNum(String clientNum) { Long areaCode = seClientMapper.getAreaCodeByNum(clientNum); if (areaCode == null) { return ""; } return String.valueOf(areaCode); } /** * 根据农户编号获取5级行政区划串areaCode,补卡过程中开新卡使用 * * @param clientId * @return */ public Long getAreaCodeById(Long clientId) { return seClientMapper.getAreaCodeById(clientId); } /** * 根据行政区划串模块查询水卡编号,开卡使用 * * @param areaCode * @return */ public String getCardNumOfMax(String areaCode) { return seClientCardMapper.getCardNumOfMax(areaCode); } /** * 根据行政区划串模糊查询管理卡编号,创建管理卡使用 * * @param areaCode * @return */ public String getManagerCardNumOfMax(String areaCode) { return seManagerCardMapper.getManagerCardNumOfMax(areaCode); } /** * 创建管理卡 * * @param po * @return */ public Long addManagerCard(SeManagerCard po) { seManagerCardMapper.insert(po); return po.getId(); } /** * 根据农户编号获取农户ID,开卡使用 * * @param clientNum * @return */ public Long getClientIdByNum(String clientNum) { return seClientMapper.getClientIdByNum(clientNum); } /** * 添加水卡操作对象,各操作都使用 * * @param po 水卡操作对象 * @return 操作记录主键 */ public Long add(SeCardOperate po) { seCardOperateMapper.insert(po); return po.getId(); } /** * 添加充值记录 * 修改农户信息、添加水卡操作记录、添加充值记录 * * @param po * @return */ public BaseResponse addRecharge(DtoRecharge po) { /** * cardId 水卡编号(依据水卡编号获取) * clientId 农户编号(依据水卡编号获取) * cardNum 水卡编号 * money 卡片余额 * amount 充值金额 * gift 赠送金额 * afterRecharge 充值后余额 * paymentId 支付方式编号 * price 水价 * remarks 备注 * operator 操作人编号 * rechargeTime 充值时间 */ Long cardId = 0L; Long clientId = 0L; Long cardNum = po.getCardNum(); Float money = po.getMoney(); Float amount = po.getAmount(); Float gift = po.getGift(); Float afterRecharge = money + amount + gift; Long paymentId = po.getPaymentId(); Float price = po.getPrice(); String remarks = po.getRemarks(); Long operator = po.getOperator(); Date rechargeTime = new Date(); // 获取水卡状态 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); // 单独充值时卡片必须为正常 if (remarks.trim().equals("充值") && !stateName.equals("正常")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } // 开卡同步充值时允许卡片为无效状态,得到通知后自动变更为有效 if (!remarks.trim().equals("充值") && !stateName.equals("正常") && !stateName.equals("无效卡片")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); /** * 充值时不修改农户卡信息,收到成功通知后再修改:余额、充值时间、最后操作类型 SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(afterRecharge); seClientCard.setRechargedt(rechargeTime); seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } */ /** * 添加水卡充值操作记录 */ SeCardOperate seCardOperate = new SeCardOperate(); seCardOperate.setCardId(cardId); seCardOperate.setClientId(clientId); seCardOperate.setMoney(money); seCardOperate.setTradeAmount(amount); seCardOperate.setGift(gift); seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode()); seCardOperate.setPaymentId(paymentId); seCardOperate.setPrice(price); seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(rechargeTime); seCardOperate.setOperateValid((byte) 1); seCardOperateMapper.insert(seCardOperate); Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L); if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); } /** * 添加充值历史记录 */ SeRechargeHistory seRechargeHistory = new SeRechargeHistory(); seRechargeHistory.setCardid(cardId); seRechargeHistory.setClientid(clientId); seRechargeHistory.setMoney(money); seRechargeHistory.setAmount(amount); seRechargeHistory.setGift(gift); seRechargeHistory.setAfterrecharge(afterRecharge); seRechargeHistory.setPaymentid(paymentId); seRechargeHistory.setPrice(price); seRechargeHistory.setRemarks(remarks); seRechargeHistory.setOperator(operator); seRechargeHistory.setOperatedt(rechargeTime); seRechargeHistory.setOperateValid((byte) 1); seRechargeHistoryMapper.insert(seRechargeHistory); Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L); if (rec_seRechargeHistory == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_RECHARGE_HISTORY_ERROR.getMessage()); } Map map_response = new HashMap(); map_response.put("projectNo", String.format("%02x", projectNo)); map_response.put("orderNumber", rec); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response); } /** * 根据指定条件获取充值记录 * * @param queryVo * @return */ public QueryResultVo> getRecharges(QoRecharge queryVo) { //完善查询充值记录的起止时间 //String rechargeTimeStart = queryVo.rechargeTimeStart; //String rechargeTimeStop = queryVo.rechargeTimeStop; //if(rechargeTimeStart != null) { // rechargeTimeStart = rechargeTimeStart + " 00:00:00"; // queryVo.setRechargeTimeStart(rechargeTimeStart); //} //if(rechargeTimeStop != null) { // rechargeTimeStop = rechargeTimeStop + " 23:59:59"; // queryVo.setRechargeTimeStop(rechargeTimeStop); //} Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = seCardOperateMapper.getRecordCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getRecharges(params); return rsVo; } /** * 获取充值记录,管理平台充值列表使用,APP未使用 * * @param queryVo * @return */ public QueryResultVo> getRechargesNew(QoRecharge queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = seCardOperateMapper.getRechargesCountNew(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getRechargesNew(params); return rsVo; } /** * 获取返还记录,管理平台充值列表使用 * * @param queryVo * @return */ public QueryResultVo> getRefunds(QoRecharge queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = seCardOperateMapper.getRefundsCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getRefunds(params); return rsVo; } /** * 获取水卡消费记录,管理平台使用 * * @param queryVo * @return */ public QueryResultVo> getExpends(QoRecharge queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = rmOpenCloseValveHistoryMapper.getExpendsCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getExpends(params); return rsVo; } /** * 根据指定条件获取交易记录 * * @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 params = (Map) PojoUtils.generalize(vo); // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = vo.pageSize; rsVo.pageCurr = vo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getTransactions(params); List list = rsVo.obj; if (list.size() == 0) { return new HashMap(); } // 遍历交易明细记录,汇总购水金额、购卡金额 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 queryVo * @return */ public QueryResultVo> getActiveCards(QoActiveCard queryVo) { //完善查询充值记录的起止时间 String activeTimeStart = queryVo.activeTimeStart; String activeTimeStop = queryVo.activeTimeStop; if (activeTimeStart != null) { activeTimeStart = activeTimeStart + " 00:00:00"; queryVo.setActiveTimeStart(activeTimeStart); } if (activeTimeStop != null) { activeTimeStop = activeTimeStop + " 23:59:59"; queryVo.setActiveTimeStop(activeTimeStop); } Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = seCardOperateMapper.getActiveCardRecordCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getActiveCards(params); return rsVo; } /** * 根据指定条件获取补卡记录 * * @param queryVo * @return */ public QueryResultVo> getReissueCards(QoReissueCard queryVo) { //完善查询充值记录的起止时间 String reissueCardTimeStart = queryVo.reissueCardTimeStart; String reissueCardTimeStop = queryVo.reissueCardTimeStop; if (reissueCardTimeStart != null) { reissueCardTimeStart = reissueCardTimeStart + " 00:00:00"; queryVo.setReissueCardTimeStart(reissueCardTimeStart); } if (reissueCardTimeStop != null) { reissueCardTimeStop = reissueCardTimeStop + " 23:59:59"; queryVo.setReissueCardTimeStop(reissueCardTimeStop); } Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = seCardOperateMapper.getReissueCardRecordCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getReissueCards(params); return rsVo; } /** * 根据指定条件获取通用操作记录 * * @param queryVo * @return */ public QueryResultVo> getCommonOperations(QoCommonOperate queryVo) { //完善查询充值记录的起止时间 String timeStart = queryVo.getTimeStart(); String timeStop = queryVo.getTimeStop(); if (timeStart != null) { timeStart = timeStart + " 00:00:00"; queryVo.setTimeStart(timeStart); } if (timeStop != null) { timeStop = timeStop + " 23:59:59"; queryVo.setTimeStop(timeStop); } Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = Optional.ofNullable(seCardOperateMapper.getCommonOperationRecordCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getCommonOperations(params); return rsVo; } /** * 根据指定条件获取收据列表 * * @param queryVo * @return */ public Map getReceipts(QoReceipt queryVo) { if (queryVo.getTimeStart() != null && queryVo.getTimeStart() != "") { queryVo.setTimeStart(queryVo.getTimeStart() + " 00:00:00"); } if (queryVo.getTimeStop() != null && queryVo.getTimeStop() != "") { queryVo.setTimeStop(queryVo.getTimeStop() + " 23:59:59"); } Map params = (Map) PojoUtils.generalize(queryVo); DecimalFormat df = new DecimalFormat("#.00"); Double totalAmount = Optional.ofNullable(seCardOperateMapper.getTotalAmount(params)).orElse(0.0); Long itemTotal = seCardOperateMapper.getReceiptsRecordCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); //rsVo.obj = seCardOperateMapper.getReceipts(params); //return rsVo ; List list = seCardOperateMapper.getReceipts(params); Map map_record = new HashMap(); map_record.put("itemTotal", rsVo.itemTotal); map_record.put("pageCurr", rsVo.pageCurr); map_record.put("pageSize", rsVo.pageSize); map_record.put("pageTotal", rsVo.pageTotal); map_record.put("list", list); Map map_result = new HashMap(); map_result.put("totalAmount", df.format(totalAmount)); map_result.put("records", map_record); return map_result; } /** * 判断指定水卡是否为挂失状态且无补卡记录 * * @param cardNum 水卡编号 * @return 是否已挂失未补卡 */ public Boolean isLostAndUnreplaced(Long cardNum) { Integer lostCount = seClientCardMapper.getLostCount(cardNum); Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum); if (lostCount > 0 && replacedCount == 0) { return true; } return false; } /** * 修改农户水卡 * * @param po * @return */ public Integer updateClientCard(SeClientCard po) { return seClientCardMapper.updateByPrimaryKeySelective(po); } /** * 获取项目编号 * * @return */ public String getProjectNo() { return baSettingsMapper.getItemValue("projectNo"); } /** * 根据水卡编号获取其挂失时退款金额(补卡时判断使用) * * @param cardNum * @return */ public Double getTradeAmountByCardNo(Long cardNum) { return seCardOperateMapper.getTradeAmountByCardNo(cardNum); } /** * 根据水卡地址判断该卡是否可以开卡 * * @param cardAddr * @return */ public Boolean canActiveCard(String cardAddr) { // 指定水卡地址的水卡数量,无效卡片排除在外 Long cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddr(cardAddr)).orElse(0L); if (cardCount == 0) { return true; } // 指定水卡地址且正常状态或挂失状态的水卡数量 cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddrAndState(cardAddr)).orElse(0L); if (cardCount == 0) { return true; } return false; } /** * 依据水卡地址获取水卡编号 * * @param cardAddr * @return */ public Long getCardIdByAddr(String cardAddr) { return seClientCardMapper.getCardIdByAddr(cardAddr); } /** * 依据水卡地址将最后一条无效状态的指定操作记录改为有效 * * @param cardAddr * @param operateType * @return */ public Integer turnCardValidByAddr(String cardAddr, Integer operateType) { return seClientCardMapper.turnCardValidByAddr(cardAddr, operateType); } /** * 根据水卡ID、操作类型获取获取最后一条记录,判断开卡是否同步充值使用 * * @param cardId * @return */ public Integer turnOperateValidByCardId(Long cardId, Integer operateType) { return seCardOperateMapper.turnOperateValidByCardId(cardId, operateType); } /** * 依据水卡ID将最后一条无效状态的充值历史记录改为有效 * * @param cardId * @return */ public Integer turnRechargeHistoryValidByCardId(Long cardId) { return seRechargeHistoryMapper.turnRechargeHistoryValidByCardId(cardId); } /** * 根据水卡ID判断是否为开卡时同步充值 * 该水卡ID不存在开卡记录或充值记录则返回false * 如果开卡操作与充值操作时间间隔超过30秒则返回false * 如果充值金额大于0且充值前余额为0则返回true * * @param cardId * @return */ public Boolean isMergeRecharge(Long cardId) { SeCardOperate activeCard = seCardOperateMapper.getCardOperate(1, cardId); SeCardOperate recharge = seCardOperateMapper.getCardOperate(2, cardId); if (activeCard == null || recharge == null) { return false; } Duration duration = Duration.between(activeCard.getOperateDt().toInstant(), recharge.getOperateDt().toInstant()); if (duration.toSeconds() > 30) { return false; } Float money = Optional.ofNullable(recharge.getMoney()).orElse(0f); Float tradeAmount = Optional.ofNullable(recharge.getTradeAmount()).orElse(0f); if (tradeAmount > 0 && money == 0) { return true; } else { return false; } } /** * 根据水卡ID从操作记录表中取出:余额、交易金额、赠送金额,求和得到水卡余额 * 将余额更新到水卡表中 * * @param cardId * @return */ public Boolean updateCard(Long cardId) { SeCardOperate recharge = seCardOperateMapper.getCardOperate(2, cardId); if (recharge == null) { return false; } Float money = Optional.ofNullable(recharge.getMoney()).orElse(0f); Float amount = Optional.ofNullable(recharge.getTradeAmount()).orElse(0f); Float gift = Optional.ofNullable(recharge.getGift()).orElse(0f); SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setMoney(money + amount + gift); clientCard.setRechargedt(recharge.getOperateDt()); clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode()); Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard); if (rec_updateClientCard == null || rec_updateClientCard == 0) { return false; } return true; } /** * 如果补卡时转移了退还金额,清空挂失卡余额 * @param operateType * @param cardId */ public void emptyCardBalance(Integer operateType, Long cardId) { SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId); if(cardOperate != null) { Float noTradeAmount = cardOperate.getNoTradeAmount(); if(noTradeAmount != null && noTradeAmount > 0) { Long originalCardId = seClientCardMapper.getOriginalCardIdByCardId(cardId); if(originalCardId != null) { SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setMoney(0f); seClientCardMapper.updateByPrimaryKeySelective(clientCard); } } } } /** * 修改注销水卡表的记录及余额(0) * @param cardId * @return */ public Integer updateCancels(Integer operateType, Long cardId) { SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId); Date cancelTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date()); SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setCanceldt(cancelTime); clientCard.setMoney(0f); clientCard.setState(CardStateENUM.CANCELLED.getCode()); clientCard.setLastoper(LastOperateENUM.CANCEL.getCode()); return seClientCardMapper.updateByPrimaryKeySelective(clientCard); } /** * 修改补扣水卡表的操作信息及余额 * @param operateType * @param cardId * @return */ public Integer updateRefund(Integer operateType, Long cardId) { SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId); Date refundTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date()); Float money = cardOperate.getMoney(); Float refund = cardOperate.getRefundAmount(); SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setRefunddt(refundTime); clientCard.setMoney(money + refund); clientCard.setLastoper(LastOperateENUM.REFUND.getCode()); return seClientCardMapper.updateByPrimaryKeySelective(clientCard); } }