|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dy.common.webUtil.BaseResponse; | 
|---|
|  |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.daoSe.SeVcRechargeMapper; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; | 
|---|
|  |  |  | import com.dy.common.webUtil.QueryResultVo; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.daoSe.*; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.pojoSe.SeVcRecharge; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.pojoSe.SeVcRefund; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.pojoSe.SeVcRefundItem; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.voSe.VoOrders; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.voSe.VoVcRecharge; | 
|---|
|  |  |  | import com.dy.pipIrrGlobal.voSe.VoVirtualCard; | 
|---|
|  |  |  | import com.dy.pipIrrSell.result.SellResultCode; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.dto.DtoVcRecharge; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.dto.DtoVirtualCard; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM; | 
|---|
|  |  |  | import com.dy.pipIrrSell.virtualCard.enums.OrderStateENUM; | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SeVcRechargeMapper seVcRechargeMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SeVcRefundMapper seVcRefundMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SeVcRefundItemMapper seVcRefundItemMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SeClientMapper seClientMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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 | 
|---|
|  |  |  | 
|---|
|  |  |  | seVirtualCardMapper.insert(po); | 
|---|
|  |  |  | return po.getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据行政区划串模糊查询虚拟卡编号,注册虚拟卡使用 | 
|---|
|  |  |  | * @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()); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 修改虚拟卡 | 
|---|
|  |  |  | 
|---|
|  |  |  | public SeVirtualCard selectVirtuCardById(Long virtualId) { | 
|---|
|  |  |  | return seVirtualCardMapper.selectByPrimaryKey(virtualId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 添加虚拟卡充值记录 | 
|---|
|  |  |  | * JSAPI下单后生成部分充值记录 | 
|---|
|  |  |  | 
|---|
|  |  |  | String orderNumber = po.getOrderNumber(); | 
|---|
|  |  |  | Long virtualId = po.getVirtualId(); | 
|---|
|  |  |  | Long clientId = po.getClientId(); | 
|---|
|  |  |  | Integer rechargeAmount = po.getRechargeAmount(); | 
|---|
|  |  |  | Double rechargeAmount = po.getRechargeAmount(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 验证该虚拟卡账户是否存在并取出当前账户余额 | 
|---|
|  |  |  | SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据订单号获取虚拟卡充值对象 | 
|---|
|  |  |  | * @param orderNumber | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public SeVcRecharge getVCRechargeByorderNumber(String orderNumber) { | 
|---|
|  |  |  | return seVcRechargeMapper.getVCRechargeByorderNumber(orderNumber); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 修改虚拟卡充值记录 | 
|---|
|  |  |  | * 微信支付通知后: | 
|---|
|  |  |  | *      1. 更新充值表:充值后余额、支付完成时间、订单状态 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Long virtualId = seVcRecharge.getVcId(); | 
|---|
|  |  |  | Double money = seVcRecharge.getMoney(); | 
|---|
|  |  |  | Integer rechargeAmount = seVcRecharge.getRechargeAmount(); | 
|---|
|  |  |  | Double rechargeAmount = seVcRecharge.getRechargeAmount(); | 
|---|
|  |  |  | Double afterRrecharge = money + rechargeAmount; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | seVcRecharge.setAfterRecharge(afterRrecharge); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 修改虚拟卡充值记录 | 
|---|
|  |  |  | * 修改虚拟卡充值记录(废弃) | 
|---|
|  |  |  | * 微信小程序支付通知后修改:余额、充值后余额、充值完成时间 | 
|---|
|  |  |  | * @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(DtoVcRecharge 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|