package com.dy.pipIrrWechat.virtualCard;
|
|
import com.dy.common.webUtil.BaseResponse;
|
import com.dy.common.webUtil.BaseResponseUtils;
|
import com.dy.common.webUtil.QueryResultVo;
|
import com.dy.pipIrrGlobal.daoSe.*;
|
import com.dy.pipIrrGlobal.pojoSe.*;
|
import com.dy.pipIrrGlobal.voSe.VoOrders;
|
import com.dy.pipIrrGlobal.voSe.VoRechargeProfile;
|
import com.dy.pipIrrGlobal.voSe.VoVcRecharge;
|
import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
|
import com.dy.pipIrrWechat.result.WechatResultCode;
|
import com.dy.pipIrrWechat.virtualCard.dto.DtoVirtualCard;
|
import com.dy.pipIrrWechat.virtualCard.enums.LastOperateENUM;
|
import com.dy.pipIrrWechat.virtualCard.enums.OrderStateENUM;
|
import com.dy.pipIrrWechat.virtualCard.qo.QoVcRecharge;
|
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 org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @author ZhuBaoMin
|
* @date 2024-07-15 9:39
|
* @LastEditTime 2024-07-15 9:39
|
* @Description
|
*/
|
|
@Slf4j
|
@Service
|
public class VirtualCardSv {
|
@Autowired
|
private SeVirtualCardMapper seVirtualCardMapper;
|
|
@Autowired
|
private SeVcRechargeMapper seVcRechargeMapper;
|
|
@Autowired
|
private SeVcRefundMapper seVcRefundMapper;
|
|
@Autowired
|
private SeVcRefundItemMapper seVcRefundItemMapper;
|
|
@Autowired
|
private SeClientMapper seClientMapper;
|
|
@Autowired
|
private SeVcOperateMapper seVcOperateMapper;
|
|
@Autowired
|
private SeRechargeProfileMapper seRechargeProfileMapper;
|
|
@Value("${vc.alarmValue}")
|
private Integer alarmValue;
|
|
/**
|
* 根据农户ID获取5级行政区划代码,注册虚拟卡使用
|
* @param clientId 农户ID
|
* @return 5级行政区划代码
|
*/
|
public Long getAreaCodeById(Long clientId) {
|
return seClientMapper.getAreaCodeById(clientId);
|
}
|
|
/**
|
* 获取农户全部虚拟卡
|
* @return
|
*/
|
public List<VoVirtualCard> getVCs(Long clientId) {
|
return seVirtualCardMapper.getVCs(alarmValue, clientId);
|
}
|
|
/**
|
* 根据虚拟卡ID获取虚拟卡对象
|
* @param vcId
|
* @return
|
*/
|
public VoVirtualCard getVcById(Long vcId) {
|
return seVirtualCardMapper.getVcById(vcId);
|
}
|
|
/**
|
* 注册虚拟卡
|
* @param po
|
* @return
|
*/
|
public Long insertVirtualCard(SeVirtualCard po) {
|
seVirtualCardMapper.insert(po);
|
return po.getId();
|
}
|
|
/**
|
* 根据农户ID及虚拟卡ID获取正常状态的虚拟卡对象
|
* @param clientId
|
* @param vcId
|
* @return
|
*/
|
public SeVirtualCard getVcByClientIdAndVcId (Long clientId, Long vcId) {
|
return seVirtualCardMapper.getVcByClientIdAndVcId(clientId, vcId);
|
}
|
|
/**
|
* 根据虚拟卡ID注销虚拟卡
|
* @param clientId
|
* @param vcId
|
* @return
|
*/
|
public Integer cancelVc(Long clientId, Long vcId) {
|
return seVirtualCardMapper.cancelVc(clientId, vcId);
|
}
|
|
/**
|
* 根据行政区划串模糊查询虚拟卡编号,注册虚拟卡使用
|
* @param areaCode
|
* @return
|
*/
|
String getVcCardNumOfMax(String areaCode) {
|
return seVirtualCardMapper.getVcCardNumOfMax(areaCode);
|
}
|
|
/** 废弃
|
* 验证农户是否拥有指定名称的虚拟卡
|
* @param po
|
* @return
|
*/
|
//public Integer getRecordCountByName(DtoRegist po) {
|
// return seVirtualCardMapper.getRecordCountByName(po.getClientId(), po.getVcName());
|
//}
|
|
/**
|
* 修改虚拟卡
|
* 充值、消费、申请退款、审核退款时需要修改虚拟卡的:余额、最后操作、最后操作时间
|
* @param po
|
* @return
|
*/
|
public Integer updateVirtualCard(SeVirtualCard po) {
|
return seVirtualCardMapper.updateByPrimaryKeySelective(po);
|
}
|
|
/**
|
* 根据虚拟卡编号获取虚拟卡对象
|
* @param virtualId
|
* @return
|
*/
|
public SeVirtualCard selectVirtuCardById(Long virtualId) {
|
return seVirtualCardMapper.selectByPrimaryKey(virtualId);
|
}
|
|
/**
|
* 添加虚拟卡充值记录
|
* JSAPI下单后生成部分充值记录
|
* @param po
|
* @return -1:虚拟卡不存在,0:添加充值记录失败
|
*/
|
//public BaseResponse<Boolean> insertVCRecharge(DtoVirtualCard po) {
|
public Long insertVCRecharge(DtoVirtualCard po) {
|
String orderNumber = po.getOrderNumber();
|
Long virtualId = po.getVirtualId();
|
Long clientId = po.getClientId();
|
Double rechargeAmount = po.getRechargeAmount();
|
|
// 验证该虚拟卡账户是否存在并取出当前账户余额
|
SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId);
|
|
if(seVirtualCard == null) {
|
return -1L;
|
}
|
Double money = seVirtualCard.getMoney();
|
|
// 添加充值记录
|
SeVcRecharge seVcRecharge = new SeVcRecharge();
|
seVcRecharge.setVcId(virtualId);
|
seVcRecharge.setClientId(clientId);
|
seVcRecharge.setMoney(money);
|
seVcRecharge.setOrderNumber(orderNumber);
|
seVcRecharge.setRechargeAmount(rechargeAmount);
|
seVcRecharge.setOrderTime(new Date());
|
seVcRecharge.setOrderState(OrderStateENUM.NON_PAYMENT.getCode());
|
seVcRechargeMapper.insert(seVcRecharge);
|
Long rechargeId = seVcRecharge.getId();
|
if(rechargeId == null) {
|
return 0L;
|
}
|
return rechargeId;
|
}
|
|
/**
|
* 根据订单号获取虚拟卡充值对象
|
* @param orderNumber
|
* @return
|
*/
|
public SeVcRecharge getVCRechargeByorderNumber(String orderNumber) {
|
return seVcRechargeMapper.getVCRechargeByorderNumber(orderNumber);
|
}
|
|
/**
|
* 修改虚拟卡充值记录
|
* 微信支付通知后:
|
* 1. 更新充值表:充值后余额、支付完成时间、订单状态
|
* 2. 更新虚拟卡表:账户余额、最后操作、最后操作时间
|
* @param orderNumber 订单编号
|
* @return
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public BaseResponse<Boolean> updateVCRecharge(String orderNumber, Date rechargeTime) {
|
SeVcRecharge seVcRecharge = seVcRechargeMapper.getVCRechargeByorderNumber(orderNumber);
|
if(seVcRecharge == null) {
|
return BaseResponseUtils.buildFail(WechatResultCode.RECHARGE_NOT_EXIST.getMessage());
|
}
|
|
Long virtualId = seVcRecharge.getVcId();
|
Double money = seVcRecharge.getMoney();
|
Double rechargeAmount = seVcRecharge.getRechargeAmount();
|
Double afterRrecharge = money + rechargeAmount;
|
|
seVcRecharge.setAfterRecharge(afterRrecharge);
|
seVcRecharge.setRechargeTime(rechargeTime);
|
seVcRecharge.setOrderState(OrderStateENUM.PAID.getCode());
|
Integer rec = seVcRechargeMapper.updateByPrimaryKeySelective(seVcRecharge);
|
if(rec == null) {
|
return BaseResponseUtils.buildFail(WechatResultCode.RECHARGE_FAIL.getMessage());
|
}
|
|
SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId);
|
if(seVirtualCard == null) {
|
return BaseResponseUtils.buildFail(WechatResultCode.VIRTUAL_CARD_NOT_EXIST.getMessage());
|
}
|
seVirtualCard.setMoney(afterRrecharge);
|
seVirtualCard.setLastOperate(LastOperateENUM.RECHARGE.getCode());
|
seVirtualCard.setLastOperateTime(new Date());
|
Integer rec2 = seVirtualCardMapper.updateByPrimaryKeySelective(seVirtualCard);
|
if(rec2 == null) {
|
return BaseResponseUtils.buildFail(WechatResultCode.RECHARGE_FAIL.getMessage());
|
}
|
return BaseResponseUtils.buildSuccess(true) ;
|
}
|
|
/**
|
* 修改虚拟卡充值记录(废弃)
|
* 微信小程序支付通知后修改:余额、充值后余额、充值完成时间
|
* @param po
|
* @return
|
*/
|
public Integer updateVCRecharge(SeVcRecharge po) {
|
return seVcRechargeMapper.updateByPrimaryKeySelective(po);
|
}
|
|
/**
|
* 根据虚拟卡号获取订单列表
|
* @param virtualId
|
* @return
|
*/
|
public List<VoOrders> selectOrders(Long virtualId) {
|
List<VoOrders> rsVo = seVcRechargeMapper.getOrders(virtualId);
|
return rsVo ;
|
}
|
|
/**
|
* 根据退款ID获取退款对象
|
* @param refundId
|
* @return
|
*/
|
public SeVcRefund selectRefundByRefundId(Long refundId) {
|
return seVcRefundMapper.selectByPrimaryKey(refundId);
|
}
|
|
/**
|
* 添加退款申请
|
* @param po
|
* @return
|
*/
|
public Long addRefund(SeVcRefund po) {
|
seVcRefundMapper.insert(po);
|
return po.getId();
|
}
|
|
/**
|
* 修改退款记录
|
* @param po
|
* @return
|
*/
|
public Integer updateRefund(SeVcRefund po) {
|
return seVcRefundMapper.updateByPrimaryKeySelective(po);
|
}
|
|
/**
|
* 根据订单号获取其各笔退款金额
|
* @param orderNumber
|
* @return
|
*/
|
public List<Integer> selectRefundAmount(String orderNumber) {
|
List<Integer> rsVo = seVcRefundMapper.getRefundAmount(orderNumber);
|
return rsVo;
|
}
|
|
/**
|
* 添加退款分项
|
* @param po
|
* @return
|
*/
|
public Long addRefundItem(SeVcRefundItem po) {
|
seVcRefundItemMapper.insert(po);
|
return po.getRefundId();
|
}
|
|
/**
|
* 编辑退款分项
|
* @param po
|
* @return
|
*/
|
public Integer updateRefundItem(SeVcRefundItem po) {
|
return seVcRefundItemMapper.updateByPrimaryKeySelective(po);
|
}
|
|
/**
|
* 根据订单号生成退款单号
|
* @param orderNumber
|
* @return
|
*/
|
public String generateRefundNumber(String orderNumber) {
|
String refundNumber = seVcRefundItemMapper.getLastRefundNumber(orderNumber);
|
if(refundNumber == null) {
|
refundNumber = orderNumber + "01";
|
return refundNumber;
|
}
|
|
String a = String.format("%02d", (Integer.parseInt(refundNumber.substring(29,30).trim()) + 1));
|
return a;
|
}
|
|
/**
|
* 根据订单号获取充值金额,调用退款申请接口使用
|
* @param orderNumber
|
* @return
|
*/
|
public Double getRechargeAmountByOrderNumber(String orderNumber) {
|
return seVcRechargeMapper.getRechargeAmountByOrderNumber(orderNumber);
|
|
}
|
|
/**
|
* 根据退款通知接口返回的退款单号反查退款ID,查询该退款ID下未退款记录数量
|
* @param refundNumber
|
* @return
|
*/
|
public Integer getNoRefundedCount(String refundNumber) {
|
return seVcRefundItemMapper.getNoRefundedCount(refundNumber);
|
}
|
|
/**
|
* 根据退款单号获取退款ID,退款通知后更新退款表所需
|
* @param refundNumber
|
* @return
|
*/
|
public Long getRefundIdByRefundNumber(String refundNumber) {
|
return seVcRefundItemMapper.getRefundIdByRefundNumber(refundNumber);
|
}
|
|
/**
|
* 获取虚拟卡充值记录
|
* @param dtoVcRecharge
|
* @return
|
*/
|
public QueryResultVo<List<VoVcRecharge>> getVcRechargeRecords(QoVcRecharge dtoVcRecharge){
|
Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(dtoVcRecharge);
|
Long itemTotal = seVirtualCardMapper.getRechargeRecordCount(params);
|
|
QueryResultVo<List<VoVcRecharge>> rsVo = new QueryResultVo<>();
|
rsVo.pageSize = dtoVcRecharge.pageSize;
|
rsVo.pageCurr = dtoVcRecharge.pageCurr;
|
|
rsVo.calculateAndSet(itemTotal, params);
|
rsVo.obj = seVirtualCardMapper.getVcRechargeRecords(params);
|
|
return rsVo;
|
}
|
|
/**
|
* 添加虚拟卡操作记录
|
* @param po
|
* @return
|
*/
|
public Long insertVcOperate(SeVcOperate po) {
|
seVcOperateMapper.insert(po);
|
return po.getId();
|
}
|
|
/**
|
* 获取虚拟卡常用充值金额配置
|
* @return
|
*/
|
public List<VoRechargeProfile> gerRechargeProfiles() {
|
return seRechargeProfileMapper.gerRechargeProfiles();
|
}
|
}
|