20220125

使用postman,操作,接口关联,全局变量,断言,视频已发

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
public void dealZxSgAndCopyData(String today) { log.info("dealZxSgAndCopyData start "); //从临时表取出初始结果,开始跑增信方关联关系 this.dealZxAdjust(today); log.info("dealZxAdjust end "); //跑手工调整 this.doSgAdjust(); log.info("doSgAdjust end "); //跑批完成,将数据移至正式表,都是当日全量数据全删全增 //明细表 // 20230506 手工开启事务 // TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition); try { WarnTriggerDetail validate = new WarnTriggerDetail(); validate.setMonitorDate(today); mapper.deleteByDate(validate);//删除当日明细表数据 mapper.insertAll(); //结果表 resultMapper.deleteByDate(today);//删除当日结果表数据 resultMapper.insertAll(); // //20240813 风险画像增加画像预警,只保存每月月末数据,最新数据 // if (DateUtil.isLastDayOfMonth(today) || today.equals(DateUtil.getToday())){ // mapper.deleteByDatePortrait(validate);//删除当日明细表数据 // mapper.insertAllPortrait(); // resultMapper.deleteByDatePortrait(today);//删除当日结果表数据 // resultMapper.insertAllPortrait(); // try { // String yesterday = DateUtil.add(today,-1); // if (!DateUtil.isLastDayOfMonth(yesterday)){ // validate = new WarnTriggerDetail(); // validate.setMonitorDate(yesterday); // mapper.deleteByDatePortrait(validate);//删除昨天明细表数据 // resultMapper.deleteByDatePortrait(yesterday);//删除昨天结果表数据 // } // }catch (Exception e){ // log.error("系统异常:",e); // } // } //最新预警数据处理20230109,非当日数据不处理 if (today.equals(DateUtil.getToday())){ warnResultInfoNewMapper.deleteAll(); // try { // log.info("睡眠开始"); // Thread.sleep(1000*60*3); // log.info("睡眠结束"); // } catch (Exception e) { // log.error("系统异常:",e); // } warnResultInfoNewMapper.insertAll(); warnTriggerDetailNewMapper.deleteAll(); warnTriggerDetailNewMapper.insertAll(); // /** // * 先删后增 // * 插入增信措施交易对手历史表后 将作为融资方增信方管理人数据新增ODS_RATIO_SPLIT_HIS_MAXDATE临时表 // * 提升单一客户统一风险视图-关联业务信息查询最大日期效率 // */ // String tdate = riskPortraitConfigDateMapper.qryWarnDateByMonitorDate(today); // odsRatioMapper.deleteAll(tdate);// 20230628 统一风险视图二阶段,将该方法放到预警的事务中,跟预警一个事务 // // odsRatioMapper.insertAll(tdate); // //风险画像预警、集中度月份维护 // riskPortraitConfigDateBiz.addWarnData(today); // redisUtil.set(MonitorDateCache,today); } // platformTransactionManager.commit(transactionStatus); } catch (Exception e) { log.error("系统异常:",e); log.error("e={}",e); // platformTransactionManager.rollback(transactionStatus); } //最后一步,存历史,包括信号表、差异化表(行业阈值、差异化)、等级对照表、预警等级调整名单 // this.saveHistory(today); log.info("dealZxSgAndCopyData end "); } public void dealZxAdjust(String today) { List<WarnResultInfoTemp> endList = warnResultInfoTempMapper.selectAll(); if (endList.size() > 0) { for (WarnResultInfoTemp vo : endList) { this.doZxAdjust(vo); } } } public void doZxAdjust(WarnResultInfoTemp vo) { String jg = "1";//较高风险 生效 0-失效 1-生效 String hg = "1";//很高风险 生效 0-失效 1-生效 //add by wangchao 20220302 判断增信方关联关系信号是否生效 WarnTriggerDetailTemp zx = new WarnTriggerDetailTemp(); zx.setSignalCode("060101"); List<WarnTriggerDetailTemp> jgSiganl = warnTriggerDetailTempMapper.select(zx); if (jgSiganl.size() == 0) { jg = "0"; } zx.setSignalCode("060102"); List<WarnTriggerDetailTemp> hgSiganl = warnTriggerDetailTempMapper.select(zx); if (hgSiganl.size() == 0) { hg = "0"; } if (jg.equals("1") || hg.equals("1")) { WarnTriggerDetailTemp detail = new WarnTriggerDetailTemp(); detail.setMonitorDate(vo.getMonitorDate()); detail.setTdate(vo.getTdate()); detail.setItcode2(vo.getItcode2()); detail.setBatch(vo.getBatch()); String info = ""; int zxyjnum = 0; int zxgznum = 0; String mathvalue = ""; //查找客户增信方 List<WarnResultInfo> zxlist = resultMapper.queryZx(detail); if (zxlist.size() > 0) {//有增信方 if (hg.equals("1")) {//很高生效 info = ""; mathvalue = ""; Map<String, String> hgmap = new HashMap<>(); for (WarnResultInfo zxinfo : zxlist) { int zxcount = this.getCount(zxinfo.getItname(), ","); if (zxcount == 0) {//不拆逗号 String a = hgmap.get(zxinfo.getItname()); if (Assert.isNullOrEmpty(a)) { detail.setItname(zxinfo.getItname()); int zxyj = resultMapper.queryZengxinYJ(detail);//预警等级增信方 if (zxyj != 0) {//触发 zxyjnum++; info = info + "该客户的增信方" + zxinfo.getItname() + "存在很高风险;"; } mathvalue = mathvalue + zxinfo.getItname() + "|"; hgmap.put(zxinfo.getItname(), zxinfo.getItname()); } } else {//需要拆分逗号 String[] zxi = this.tranZxArray(zxinfo.getItname()); for (int i = 0; i < zxcount; i++) { String a = hgmap.get(zxi[i]); if (Assert.isNullOrEmpty(a)) { detail.setItname(zxi[i]); int zxyj = resultMapper.queryZengxinYJ(detail);//预警等级增信方 if (zxyj != 0) {//触发 zxyjnum++; info = info + "该客户的增信方" + zxi[i] + "存在很高风险;"; } mathvalue = mathvalue + zxi[i] + "|"; hgmap.put(zxi[i], zxi[i]); } } } } if (zxyjnum != 0) {//触发,更新表 info = info.substring(0, info.length() - 1) + "。"; detail.setSignalCode("060102"); detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 info = info.replace("。。", "。"); info = info.replace("。;", "。"); detail.setTriggerInfo(info); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); detail.setMathResult(mathvalue); if (detail.getIstrigger().equals("0")) { vo.setNoFinanceCount(vo.getNoFinanceCount() + 1); vo.setSignalCount(vo.getSignalCount() + 1);//总数量加1 } this.updateSelectiveTempById(detail); detail.setTriggerInfo(""); detail.setMathResult(""); } else {//未触发,更新表 detail.setSignalCode("060102"); detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 detail.setMathResult(mathvalue + "无(除自身外)预警等级增信方信息"); detail.setTriggerInfo(""); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(detail); } } if (jg.equals("1")) {//较高生效 info = ""; mathvalue = ""; Map<String, String> jgmap = new HashMap<>(); for (WarnResultInfo zxinfo : zxlist) { int zxcount = this.getCount(zxinfo.getItname(), ","); if (zxcount == 0) {//单个儿增信方名称 String a = jgmap.get(zxinfo.getItname()); if (Assert.isNullOrEmpty(a)) { detail.setItname(zxinfo.getItname()); int zxgz = resultMapper.queryZengxinGZ(detail);//关注等级增信方 if (zxgz != 0) {//触发 zxgznum++; info = info + "该客户的增信方" + zxinfo.getItname() + "存在较高风险;"; } mathvalue = mathvalue + zxinfo.getItname() + "|"; jgmap.put(zxinfo.getItname(), zxinfo.getItname()); } } else {//需要拆分逗号 String[] zxi = this.tranZxArray(zxinfo.getItname()); for (int i = 0; i < zxcount; i++) { String a = jgmap.get(zxi[i]); if (Assert.isNullOrEmpty(a)) { detail.setItname(zxi[i]); int zxgz = resultMapper.queryZengxinGZ(detail);//关注等级增信方 if (zxgz != 0) {//触发 zxgznum++; info = info + "该客户的增信方" + zxi[i] + "存在较高风险;"; } mathvalue = mathvalue + zxi[i] + "|"; jgmap.put(zxi[i], zxi[i]); } } } } if (zxgznum != 0) {//触发,更新表 info = info.substring(0, info.length() - 1) + "。"; detail.setSignalCode("060101"); detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 info = info.replace("。。", "。"); info = info.replace("。;", "。"); detail.setTriggerInfo(info); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); detail.setMathResult(mathvalue); if (detail.getIstrigger().equals("0")) {//没登记过触发 vo.setNoFinanceCount(vo.getNoFinanceCount() + 1); vo.setSignalCount(vo.getSignalCount() + 1);//总数量加1 } this.updateSelectiveTempById(detail); detail.setTriggerInfo(""); detail.setMathResult(""); } else {//未触发,更新 detail.setSignalCode("060101"); detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 detail.setMathResult(mathvalue + "无(除自身外)关注等级增信方信息"); detail.setTriggerInfo(""); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(detail); } } } else {//该客户无增信方信息 if (hg.equals("1")) {//很高生效 detail.setSignalCode("060102"); detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 detail.setMathResult("该客户无增信方"); detail.setTriggerInfo(""); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(detail); } if (jg.equals("1")) {//较高生效 detail.setSignalCode("060101"); detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 detail.setMathResult("该客户无增信方"); detail.setTriggerInfo(""); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(detail); } } //调整预警等级 if (zxyjnum > 0 && hg.equals("1")) { if (vo.getWarnLevelCode() < 4) { vo.setWarnLevel("预警"); vo.setWarnLevelCode(4); if (Assert.notNullOrEmpty(vo.getAdjusttype())) { vo.setAdjusttype(vo.getAdjusttype() + ",2"); } else { vo.setAdjusttype("2"); } WarnRuleSignal v = new WarnRuleSignal(); v.setSignalCode("060102"); v = signalMapper.selectOne(v); String x = v.getSignalLevelCode(); if (Assert.isNullOrEmpty(vo.getHighestLevel()) || ("99").equals(vo.getHighestLevel()) || ("0".equals(vo.getHighestLevel()))) {//处理历史数据用,只有历史数据可能存在0等级 vo.setHighestLevel(x); } else {//md by wangchao 20220125 编码越小等级越高 99-无等级 if (vo.getHighestLevel().compareTo(x) > 0) { vo.setHighestLevel(x); } } warnResultInfoTempMapper.updateByPrimaryKey(vo);//改为临时表 } } else if (zxgznum > 0 && jg.equals("1")) {//(zengxinGZList.size()>0&&jg.equals("1")) { if (vo.getWarnLevelCode() < 3) { vo.setWarnLevel("关注"); vo.setWarnLevelCode(3); if (Assert.notNullOrEmpty(vo.getAdjusttype())) { vo.setAdjusttype(vo.getAdjusttype() + ",2"); } else { vo.setAdjusttype("2"); } WarnRuleSignal v = new WarnRuleSignal(); v.setSignalCode("060101"); v = signalMapper.selectOne(v); String x = v.getSignalLevelCode(); if (Assert.isNullOrEmpty(vo.getHighestLevel()) || ("99").equals(vo.getHighestLevel()) || ("0".equals(vo.getHighestLevel()))) {//处理历史数据用,只有历史数据可能存在0等级 vo.setHighestLevel(x); } else {//md by wangchao 20220125 编码越xiao等级越高 99-无等级 if (vo.getHighestLevel().compareTo(x) > 0) { vo.setHighestLevel(x); } } warnResultInfoTempMapper.updateByPrimaryKey(vo);//改为临时表 } } } } public void doSgAdjust() { String info = ""; String yb = "1";//手工调整为一般信号生效 0-失效 1-生效 String gz = "1";//手工调整为关注信号生效 0-失效 1-生效 String yj = "1";//手工调整为预警信号生效 0-失效 1-生效 //add by wangchao 20220302 判断手工调整信号是否生效 WarnTriggerDetailTemp sg = new WarnTriggerDetailTemp(); sg.setSignalCode("070101"); List<WarnTriggerDetailTemp> gzSiganl = warnTriggerDetailTempMapper.select(sg); if (gzSiganl.size() == 0) { gz = "0"; } sg.setSignalCode("070201"); List<WarnTriggerDetailTemp> yjSiganl = warnTriggerDetailTempMapper.select(sg); if (yjSiganl.size() == 0) { yj = "0"; } sg.setSignalCode("070301"); List<WarnTriggerDetailTemp> ybSiganl = warnTriggerDetailTempMapper.select(sg); if (ybSiganl.size() == 0) { yb = "0"; } List<WarnResultInfoTemp> wri = warnResultInfoTempMapper.selectAll(); if(Assert.notNull(wri) && wri.size()>0){ if (yb.equals("1") || gz.equals("1") || yj.equals("1")) { //WarnRuleLevelAdjustment adjustvo = adjustMapper.queryAdjustList(vo.getItcode2());//人工调整名单 List<WarnRuleLevelAdjustment> wrl = adjustMapper.selectAll();//人工调整名单 if (Assert.notNull(wrl) && wrl.size()>0) { for (WarnRuleLevelAdjustment adjustvo : wrl) { WarnTriggerDetailTemp detail = new WarnTriggerDetailTemp(); detail.setItcode2(adjustvo.getItcode2()); if (wri.stream().anyMatch(e -> adjustvo.getItcode2().equals(e.getItcode2()))) { //if (adjustvo.getItcode2().equals(vo.getItcode2())) { WarnResultInfoTemp vo1 = new WarnResultInfoTemp(); vo1.setItcode2(adjustvo.getItcode2()); WarnResultInfoTemp vo = warnResultInfoTempMapper.selectOne(vo1); //登记信号触发明细表,触发07 if (adjustvo.getWarn_level_code() == 3 && gz.equals("1")) { detail.setSignalCode("070101"); info = "该客户已被人工调整至关注级别。"; WarnRuleSignal v = new WarnRuleSignal(); v.setSignalCode("070101"); v = signalMapper.selectOne(v); String x = v.getSignalLevelCode(); if (Assert.isNullOrEmpty(vo.getHighestLevel()) || ("99").equals(vo.getHighestLevel()) || ("0".equals(vo.getHighestLevel()))) {//处理历史数据用,只有历史数据可能存在0等级 vo.setHighestLevel(x); } else {//md by wangchao 20220125 编码越xiao等级越高 99-无等级 if (vo.getHighestLevel().compareTo(x) > 0) { vo.setHighestLevel(x); } } } else if (adjustvo.getWarn_level_code() == 4 && yj.equals("1")) { detail.setSignalCode("070201"); info = "该客户已被人工调整至预警级别。"; WarnRuleSignal v = new WarnRuleSignal(); v.setSignalCode("070201"); v = signalMapper.selectOne(v); String x = v.getSignalLevelCode(); if (Assert.isNullOrEmpty(vo.getHighestLevel()) || ("99").equals(vo.getHighestLevel()) || ("0".equals(vo.getHighestLevel()))) {//处理历史数据用,只有历史数据可能存在0等级 vo.setHighestLevel(x); } else {//md by wangchao 20220125 编码越xiao等级越高 99-无等级 if (vo.getHighestLevel().compareTo(x) > 0) { vo.setHighestLevel(x); } } } else if (adjustvo.getWarn_level_code() == 2 && yb.equals("1")) { detail.setSignalCode("070301"); info = "该客户已被人工调整至一般级别。"; WarnRuleSignal v = new WarnRuleSignal(); v.setSignalCode("070301"); v = signalMapper.selectOne(v); String x = v.getSignalLevelCode(); if (Assert.isNullOrEmpty(vo.getHighestLevel()) || ("99").equals(vo.getHighestLevel()) || ("0".equals(vo.getHighestLevel()))) {//处理历史数据用,只有历史数据可能存在0等级 vo.setHighestLevel(x); } else {//md by wangchao 20220125 编码越小等级越高 99-无等级 if (vo.getHighestLevel().compareTo(x) > 0) { vo.setHighestLevel(x); } } } else { // detail.setSignalCode("070101"); // detail.setErrinfo("预警等级调整名单中预警等级填写错误"); // detail = warnRuleTempmapper.queryDetail(detail);//从临时表中取数 // detail.setTriggerInfo(info); // detail.setMonitorTime(DateUtil.getTime()); // this.updateSelectiveTempById(detail); detail.setTypecode1("07"); List<WarnTriggerDetailTemp> sgList = warnTriggerDetailTempMapper.querySgDetail(detail);//从临时表中取数 for (WarnTriggerDetailTemp sgvo : sgList) { sgvo.setMathResult("无对应等级调整信息"); sgvo.setTriggerInfo(""); sgvo.setMonitorTime(DateUtil.getTime()); sgvo.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(sgvo); //TODO 收集数据最后更新一次 } continue; } detail = warnTriggerDetailTempMapper.queryDetail(detail);//从临时表中取数 detail.setTriggerInfo(info); detail.setMonitorTime(DateUtil.getTime()); detail.setCreateDate(DateUtil.getToday()); if (detail.getIstrigger().equals("0")) {//没登记过触发 vo.setNoFinanceCount(vo.getNoFinanceCount() + 1);//非财务触发信号数量加1 vo.setSignalCount(vo.getSignalCount() + 1);//总数量加1 } this.updateSelectiveTempById(detail); detail.setTriggerInfo(""); info = ""; vo.setWarnLevel(adjustvo.getWarn_level()); vo.setWarnLevelCode(adjustvo.getWarn_level_code()); vo.setAdjusttype("1");//手工调整 //return vo; vo.setMonitorTime(DateUtil.getTime()); vo.setCreateDate(DateUtil.getToday()); warnResultInfoTempMapper.updateByPrimaryKeySelective(vo); } else { detail.setTypecode1("07"); List<WarnTriggerDetailTemp> sgList = warnTriggerDetailTempMapper.querySgDetail(detail);//从临时表中取数 for (WarnTriggerDetailTemp sgvo : sgList) { sgvo.setMathResult("手工调整名单中无该客户信息"); sgvo.setTriggerInfo(""); sgvo.setMonitorTime(DateUtil.getTime()); sgvo.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(sgvo); } } } }else{ /*detail.setTypecode1("07"); List<WarnTriggerDetailTemp> sgList = warnRuleTempmapper.querySgDetail(detail);//需改为从临时表中取数 for (WarnTriggerDetailTemp sgvo : sgList) { sgvo.setMathResult("无人工调整名单信息"); sgvo.setTriggerInfo(""); sgvo.setMonitorTime(DateUtil.getTime()); sgvo.setCreateDate(DateUtil.getToday()); this.updateSelectiveTempById(sgvo); }*/ } }//return vo; } } public void updateSelectiveTempById(WarnTriggerDetailTemp entity) {//改为临时表 ValidateGenerator.validateEntity(entity, this.warnTriggerDetailTempMapper, Type.UPDATE); EntityUtils.setUpdatedInfo(entity); if (Assert.isNullOrEmpty(entity.getTriggerInfo())) { entity.setIstrigger("0"); } else { entity.setIstrigger("1"); } warnTriggerDetailTempMapper.updateByPrimaryKeySelective(entity); } 请优化上面的java代码,尽可能的减少查询和更新操作
09-23
由于没有给出具体的 `dealZxSgAndCopyData`、`dealZxAdjust`、`doZxAdjust`、`doSgAdjust`、`updateSelectiveTempById` 等方法的代码,下面提供一些通用的优化 Java 代码以减少查询和更新操作的思路。 ### 批量操作 将多次单个的查询和更新操作合并为批量操作。例如在进行数据库操作时,如果要插入或更新多条记录,使用批量插入或更新语句,而不是循环执行单个的插入或更新操作。以 JDBC 为例: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; public class BatchOperationExample { public static void batchInsert(List<String> dataList) { String url = "jdbc:mysql://localhost:3306/yourdb"; String user = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO your_table (column1) VALUES (?)")) { for (String data : dataList) { pstmt.setString(1, data); pstmt.addBatch(); } pstmt.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } } } ``` ### 缓存机制 使用缓存来减少对数据库的查询。例如,对于一些不经常变化的数据,可以将其缓存到内存中,下次需要使用时直接从缓存中获取,而不是再次查询数据库。可以使用 `ConcurrentHashMap` 作为简单的缓存: ```java import java.util.concurrent.ConcurrentHashMap; public class CacheExample { private static final ConcurrentHashMap<String, Object> cache = new ConcurrentHashMap<>(); public static Object getDataFromCache(String key) { return cache.get(key); } public static void putDataToCache(String key, Object value) { cache.put(key, value); } } ``` ### 优化查询逻辑 避免不必要的查询。在代码中仔细检查是否存在重复查询相同数据的情况,如果有,可以将查询结果进行复用。另外,优化查询语句,使用索引来提高查询效率。 ### 事务管理 合理使用事务来减少更新操作的次数。将多个更新操作放在一个事务中,这样可以减少数据库的提交次数,提高性能。例如: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TransactionExample { public static void performTransaction() { String url = "jdbc:mysql://localhost:3306/yourdb"; String user = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password)) { conn.setAutoCommit(false); // 执行多个更新操作 // ... conn.commit(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值