zhubaomin
1 天以前 ee1800e3988e4913f5328c2cba07735fb4d06eff
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
@@ -9,6 +9,7 @@
import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
import com.dy.pipIrrGlobal.voSe.VoAfterRecharge;
import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
import com.dy.pipIrrTerminal.card.dto.*;
@@ -22,6 +23,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -245,6 +247,7 @@
        seClientCard.setClientid(po.getClientId());
        seClientCard.setMoney(po.getAmount());
        seClientCard.setState(CardStateENUM.INVALID.getCode());
        seClientCard.setOrderNo(orderNo);
        if (po.getOriginalCardId() != null) {
            // 补卡
            seClientCard.setOriginalCardId(po.getOriginalCardId());
@@ -301,7 +304,7 @@
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Map plusRecharge(ActiveCard po, Long cardNum) {
    public Map plusRecharge(ActiveCard po, Long cardNum, String orderNo) {
        Map map = new HashMap<>();
        map.put("success", false);
        map.put("content", null);
@@ -318,7 +321,7 @@
        dtoRecharge.setMoney(0f);
        dtoRecharge.setGift(0f);
        dtoRecharge.setPrice(0f);
        Map map_plusRecharge = addRecharge(dtoRecharge);
        Map map_plusRecharge = addRecharge(dtoRecharge, orderNo);
        if (!map_plusRecharge.get("success").equals(true)) {
            map.put("msg", "开卡失败-充值异常");
            return map;
@@ -360,7 +363,7 @@
        }
        if (amount != null && amount > 0 && originalCardId == null) {
            Map map_plusRecharge = plusRecharge(po, cardNum);
            Map map_plusRecharge = plusRecharge(po, cardNum, orderNo);
            if(map_plusRecharge.get("success").equals(false)) {
                map.put("msg", map_plusRecharge.get("msg").toString());
                return map;
@@ -390,7 +393,7 @@
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Map addRecharge(DtoRecharge po) {
    public Map addRecharge(DtoRecharge po, String orderNo) {
        Map map = new HashMap<>();
        map.put("success", false);
        map.put("content", null);
@@ -411,7 +414,9 @@
        }
        Long cardId = Long.parseLong(map_cardAndClient.get("cardId").toString());
        Long clientId = Long.parseLong(map_cardAndClient.get("clientId").toString());
        String orderNo = generateOrderNo();
        if(orderNo == null || orderNo.length() <= 0) {
            orderNo = generateOrderNo();
        }
        /**
         * 添加水卡充值操作记录
@@ -428,7 +433,7 @@
        seCardOperate.setRemarks(po.getRemarks());
        seCardOperate.setOperator(po.getOperator());
        seCardOperate.setOperateDt(new Date());
        seCardOperate.setOrderNo(orderNo);
        seCardOperate.setOrderNo(orderNo + "p");
        seCardOperate.setOperateValid((byte) 1);
        seCardOperateMapper.insert(seCardOperate);
        Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
@@ -454,6 +459,7 @@
        seRechargeHistory.setOperator(po.getOperator());
        seRechargeHistory.setOperatedt(new Date());
        seRechargeHistory.setOperateValid((byte) 1);
        seRechargeHistory.setOrderNo(orderNo);
        seRechargeHistoryMapper.insert(seRechargeHistory);
        Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L);
        if (rec_seRechargeHistory == 0) {
@@ -568,6 +574,11 @@
        return map;
    }
    /**
     * 操作回调
     * @param po
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Map callBack(DtoCallBack po) {
        Map map = new HashMap<>();
@@ -587,20 +598,69 @@
        if(operateType == 1) {
            /**
             * 开卡操作执行通知
             *  1.依据水卡地址、订单号将无效状态的操作记录改为有效
             *  1.依据订单号将无效状态的操作记录改为有效
             *  2.依据水卡ID将无效状态的水卡记录改为有效
             *  3.如果开卡同步充值
             *      修改充值操作记录为有效
             *      修改充值历史记录为有效
             *      修改水卡表的操作信息
             */
            Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
            Integer rec_card = turnCardValidByOrderNumber(orderNumber);
            if (rec_ope == 0 || rec_card == 0) {
                map.put("msg", "不存在未生效的水卡");
                return map;
        }
            if(isMergeRecharge(cardId)) {
                turnOperateValidByOrderNumber(orderNumber + "p");
                turnRechargeHistoryValidByOrderNumber(orderNumber);
                updateCard(cardId, orderNumber+"p");
            }
        }
        map.put("success", true);
        map.put("msg", "操作成功");
        return map;
    }
    // 根据订单号将操作记录改为有效
    public Integer turnOperateValidByOrderNumber(String orderNumber) {
        return seCardOperateMapper.turnOperateValidByOrderNumber(orderNumber);
    }
    // 根据订单号将水卡改为有效
    public Integer turnCardValidByOrderNumber(String orderNumber) {
        return seClientCardMapper.turnCardValidByOrderNumber(orderNumber);
    }
    // 根据订单号将充值历史改为有效
    public Integer turnRechargeHistoryValidByOrderNumber(String orderNumber) {
        return seRechargeHistoryMapper.turnRechargeHistoryValidByOrderNumber(orderNumber);
    }
    // 根据cardId判断是否是合并充值
    public Boolean isMergeRecharge(Long cardId) {
        Integer plusRechargeCount = seCardOperateMapper.getPlusRechargeCount(cardId);
        if (plusRechargeCount == 0) {
            return false;
        }
        return true;
    }
    // 修改水卡信息
    public Boolean updateCard(Long cardId, String orderNumber) {
        VoAfterRecharge voAfterRecharge = seCardOperateMapper.getBalanceAfterRecharge(orderNumber);
        SeClientCard clientCard = new SeClientCard();
        clientCard.setId(cardId);
        clientCard.setMoney(voAfterRecharge.getBalanceAfterRecharge());
        clientCard.setRechargedt(voAfterRecharge.getOperateTime());
        clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode());
        Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard);
        if (rec_updateClientCard == null || rec_updateClientCard == 0) {
            return false;
        }
        return true;
    }
}