导出 txt文件 处理思路和实现流程

news2024/11/19 1:56:09

1.先看导出目标文件需要的字段都存不存在,

存在继续处理,不存在就添加。

例如,我这里需要在若依的用户表在添加一个银行账户数据,

//银行卡号
    private String accountNumber;

    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }

 好,假设,现在需要的字段都有了,然后我们继续下面的步骤。

2.因为我们要做导出,我们可以先去你要添加导出的页面,

把导出的按钮添加上,以及对应的方法地址写好。

<a class="btn btn-warning" οnclick="downWagesbank(yearStr,monthStr,nameStr)">
        <i class="fa fa-download"></i> 导出银行报表
    </a>

 function downWagesbank(year, month, name) {
        console.log("导出工资"+name);
        if (name == null || name == "undefind" || name == "") {
            window.open(ctx + "jh_product/bank/exportbank?year=" + yearStr + "&month=" + monthStr+"&name=" + name, "下载", true);
            // alert("请选择公司!");
            return;
        }
        window.open(ctx + "jh_product/bank/exportbank?year=" + year + "&month=" + month + "&name=" + name, "下载", true);
    }
 

 我在这解释一下这里面的   紫色地址部分,他们地址在哪来的

window.open(ctx + "jh_product/bank/exportbank?year=" + yearStr + "&month=" + monthStr+"&name=" + name, "下载", true);

它来自于controller的请求访问地址  主地址+方法地址

 

3.第三步,去写controller,写方法,给出请求接口,好让前端可以请求访问 

/**
     * 导出企业账号信息列表
     */
    @RequiresPermissions("jh_product:bank:export")
    @Log(title = "企业账号信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(TBank tBank) {
        List<TBank> list = tBankService.selectTBankList(tBank);
        ExcelUtil<TBank> util = new ExcelUtil<TBank>(TBank.class);
        return util.exportExcel(list, "企业账号信息数据");
    }

//上面那部分代码,是原始就有的,是导出方法,因为我们要导出,这次做的处理不一样,所以我们再添加一个导出方法,@RequiresPermissions("jh_product:bank:export")这部分不用写

    @Log(title = "企业账号信息", businessType = BusinessType.EXPORT)
    @GetMapping("/exportbank")
    @ResponseBody
    public void exportbank(HttpServletResponse response, String name, String year, String month) {

//让service去调用导出新写的导出方法

        Map map = tBankService.selectTBankListexport(year, month, name);

}
     

 下面这段代码是controller添加的完整代码,但是咱们先不看,一会我会详细讲

   @Log(ti下面tle = "企业账号信息", businessType = BusinessType.EXPORT)
    @GetMapping("/exportbank")
    @ResponseBody
    public void exportbank(HttpServletResponse response, String name, String year, String month) {
        Map map = tBankService.selectTBankListexport(year, month, name);
        String text = "ATNU:";
        text+=map.get("atnu").toString()+"\nMICN:";
        text+=map.get("micn").toString()+"\nCUNM:";
        text+=map.get("cunm").toString()+"\nMIAC:";
        text+=map.get("miac").toString()+"\nEYMD:";
        text+=map.get("eymd").toString()+"\n";
        List<Map> userList= (List<Map>) map.get("usermaps");
        text+="COUT:"+userList.size()+"\n";
        for(Map user:userList){
            text+=user.get("accountNumber").toString()+"|"+user.get("removeTax").toString()+"|"+user.get("user_name").toString()+"| |\n";
        }
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        response.setContentType("application/octet-stream;charset=UTF-8");
        try {
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode( year + "年" + month + "月"+name+".txt", "UTF-8"));
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes("UTF-8"));
            buff.flush();
            buff.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

 4.去service写这个方法:

 /**
     * 查询企业账号信息列表
     *
     * @param tBank 企业账号信息
     * @return 企业账号信息集合
     */
    public Map selectTBankListexport(String year, String mouth,String name);

5.对应的要写实现类,实现这个接口:

如果你需要用到其他mapper,那你需要吧mapper引进来

 @Autowired
    private TAttendRecordMapper tAttendRecordMapper;

 好,我们看重点:

 /**
     * 查询企业账号信息列表
     *
     * @param tBank 企业账号信息
     * @return 企业账号信息
     */
    @Override
    public Map selectTBankListexport(String year, String mouth, String name) {

//我们要去调mapper,查询数据库
        Map tBanks = tBankMapper.selectTBankListexport(name);

}

 下面这段代码是impl添加的完整代码,但是咱们先不看,一会我会详细讲

    /**
     * 查询企业账号信息列表
     *
     * @param tBank 企业账号信息
     * @return 企业账号信息
     */
    @Override
    public Map selectTBankListexport(String year, String mouth, String name) {
        Map tBanks = tBankMapper.selectTBankListexport(name);
        List<Map> usermaps = tBankMapper.selectUsers(year, mouth, name);
        for (Map map : usermaps) {
            String user_id = map.get("user_id").toString();
            String usersarary = map.get("usersarary").toString();
            String workdaynum = map.get("workdaynum").toString();//工作日
            BigDecimal bigDecimal = new BigDecimal(usersarary);
            BigDecimal bigDecimal1 = new BigDecimal(workdaynum);
//          日工资放进map
            BigDecimal daysalary = bigDecimal.divide(bigDecimal1, 2);
            map.put("daysalary", daysalary);
            String sectionAM = map.get("sectionAM").toString();
            String sectionPM = map.get("sectionPM").toString();
            BigDecimal multiplyAM = new BigDecimal(sectionAM).multiply(new BigDecimal(3.5));//上午小时数
            BigDecimal multiplyPM = new BigDecimal(sectionPM).multiply(new BigDecimal(4));//下午小时数
            BigDecimal add = multiplyAM.add(multiplyPM);//总小时数
            BigDecimal divide = add.divide(new BigDecimal(7.5), 2, BigDecimal.ROUND_HALF_DOWN);//漏刷天数
            BigDecimal subtract = new BigDecimal(workdaynum).subtract(divide);//到岗天数
            map.put("subtract", subtract);//到岗天数
            BigDecimal paidInWages = daysalary.multiply(subtract);//实到工资(到岗工资)
            map.put("paidInWages", paidInWages);//到岗工资
            TAttendRecord tAttendRecord = new TAttendRecord();


            tAttendRecord.setUserId(Long.valueOf(user_id));
            tAttendRecord.setYear(Long.valueOf(year));
            tAttendRecord.setMonth(Long.valueOf(mouth));
            //查询上午打卡时间
            List<Map> mapsAm = tAttendRecordMapper.selectClockam(tAttendRecord);
            //查询下午打卡时间
            List<Map> mapsPm = tAttendRecordMapper.selectClockpm(tAttendRecord);
            Long totalMinutes = 0L;//迟到总分钟数?

//        循环上午打卡信息
            for (Map mapAm : mapsAm) {
//                获取打卡时间
                String time = String.valueOf(mapAm.get("att_time"));
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                截取年月日
                String strsAm = time.substring(0, 10);//年月日
//                年月日拼接时间点
                strsAm += " 8:30:00";//年月日拼接时间
                try {
                    Date parse1 = formatter.parse(time.replace("T", " "));//打卡时间
                    Date parse = formatter.parse(strsAm);//Sting转date,时间字符串转时间格式  2022-08-01 08:30:00
                    Long datePoor = getDatePoor(parse1, parse);//因为打卡时间超过8点30,用打卡时间减去8点30,得到迟到分钟数
                    totalMinutes += datePoor;
                } catch (ParseException e) {
                    System.out.println(e.getMessage());
                    System.out.println("时间格式转换失败");
                }
            }
            //        循环下午打卡信息
            for (Map mapPm : mapsPm) {
//                获取打卡时间
                String time = String.valueOf(mapPm.get("att_time"));
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                截取年月日
                String strsPm = time.substring(0, 10);//年月日
//                年月日拼接时间点
                strsPm += " 18:00:00";//年月日拼接时间
                try {
                    //replace将”T”替换成空格“ ”
                    Date parse1 = formatter.parse(time.replace("T", " "));//打卡时间
                    Date parse = formatter.parse(strsPm);//Sting转date,时间字符串转时间格式  2022-08-01 08:30:00
                    Long datePoor = getDatePoor(parse, parse1);//因为打卡时间小于6:00,用6点减去打卡时间,得到早退分钟数
                    totalMinutes += datePoor;
                } catch (ParseException e) {
                    System.out.println("时间格式转换失败");
                }
            }
            BigDecimal multiply = new BigDecimal(totalMinutes).divide(new BigDecimal(30), 2).multiply(new BigDecimal(-100));
            //放入总迟扣除钱数
            map.put("multiply", multiply);
            BigDecimal should = paidInWages.subtract(multiply);//应付工资
            map.put("should", should);
            BigDecimal yanglao = new BigDecimal(map.get("yanglao").toString());
            BigDecimal gongshang = new BigDecimal(map.get("gongshang").toString());
            BigDecimal shiye = new BigDecimal(map.get("shiye").toString());
            BigDecimal yiliao = new BigDecimal(map.get("yiliao").toString());
            BigDecimal shengyu = new BigDecimal(map.get("shengyu").toString());
            BigDecimal gongjijin = new BigDecimal(map.get("gongjijin").toString());
            BigDecimal removeFive = should.subtract(yanglao).subtract(gongshang).subtract(shiye).subtract(yiliao).subtract(shengyu).subtract(gongjijin);
            map.put("removeFive", removeFive);//扣除五险一金后
            BigDecimal tax = new BigDecimal(map.get("tax").toString());
            map.put("removeTax", removeFive.subtract(tax));//实发
        }
        tBanks.put("usermaps", usermaps);
        return tBanks;
    }

 5.mapper

 /**
     * 查询企业账号信息列表
     * 
     * @param tBank 企业账号信息
     * @return 企业账号信息集合
     */
    public List<TBank> selectTBankList(TBank tBank);

//下面两条是新添加的查询语句,因为一条语句没法查全,所以写了俩,查什么要跟你需要导出的信息来看
    public Map selectTBankListexport(@Param("name") String name);

    public List<Map>selectUsers(@Param("year") String year,@Param("month") String mouth,@Param("name") String name);

6.mapper.xml  实际查询数据库语句

 

 <select id="selectTBankListexport" resultType="map">
        select atnu, micn, cunm, miac, eymd
        from t_bank
        where cunm like concat("%",#{name},"%")
    </select>

    <select id="selectUsers" resultType="map">
        SELECT u.user_id,
               u.user_name,
               ifnull(u.accountNumber,'') as accountNumber,
               ifnull((select s.salary
                       from t_salary s
                       where s.user_id = u.user_id
                         and s.effect_date &lt;=
                             concat(#{year}, '-', #{month}, '-', DAY ( LAST_DAY( CONCAT( #{year}, '-', #{month}, '-01')
                                 )))
                       order by s.effect_date DESC LIMIT 1 ),0) usersarary,
               (SELECT ((SELECT DAY ( LAST_DAY( CONCAT( concat( #{year},'-', #{month} ), '-01' ) ))) - count(*))
        FROM
            t_rest
        WHERE
            YEAR = #{year}
          AND MONTH = #{month}) AS workdaynum, (
        select count(*)
        from t_attend_record
        where year =#{year}
          and month =#{month}
          and user_id=u.user_id
          and type =4
          and section =0
            ) as sectionAM, (
        select count(*)
        from t_attend_record
        where year =#{year}
          and month =#{month}
          and user_id=u.user_id
          and type =4
          and section =1
            ) as sectionPM,
            ifnull(( select individual_insurance_amount
            from t_insurance_details
            where user_id=u.user_id
          and insurance_type=0
          and year =#{year}
          and month =#{month})
            , 0) as yanglao,
            ifnull(( select individual_insurance_amount
            from t_insurance_details
            where user_id=u.user_id
          and insurance_type=1
          and year =#{year}
          and month =#{month}) , 0) as gongshang,
            ifnull((
            select individual_insurance_amount
            from t_insurance_details
            where user_id=u.user_id
          and insurance_type=2
          and year =#{year}
          and month =#{month})
            , 0) as shiye,
            ifnull((
            select individual_insurance_amount
            from t_insurance_details
            where user_id=u.user_id
          and insurance_type=3
          and year =#{year}
          and month =#{month}), 0) as yiliao,
            ifnull(( select individual_insurance_amount
            from t_insurance_details
            where user_id=u.user_id
          and insurance_type=4
          and year =#{year}
          and month =#{month}), 0) as shengyu,
            ifnull(( select individual_insurance_amount
            from t_insurance_details
            where user_id=u.user_id
          and insurance_type=5
          and year =#{year}
          and month =#{month}), 0) as gongjijin,
            ifnull((
            select individual_tax_amount
            from t_personal_income_tax
            where user_id=u.user_id
          and year =#{year}
          and month =#{month}),0) as tax
        FROM
            sys_user u
    </select>

8。要查询的数据我们都获取到了,此时要去impl实现类,对查到的数据做处理

这部分上面已经讲了作用,我们继续看,

 

  @Autowired
    private TAttendRecordMapper tAttendRecordMapper;

    /**
     * 查询企业账号信息列表
     *
     * @param tBank 企业账号信息
     * @return 企业账号信息
     */
    @Override
    public Map selectTBankListexport(String year, String mouth, String name) {
        Map tBanks = tBankMapper.selectTBankListexport(name);

继续:

用一个变量接收  mapper.xml查询出来的语句

这是上面mapper.xml的数据:

<select id="selectUsers" resultType="map">

 跟据mappper.xml的这部分resultType="map"  得知接参数的类型是什么,也要参考你controller里的参数类型

 

注释:如果是resultaMap="domain表名"   如果是map,resultaMap要写成resultType,resultType="map"

好,我们用一个参数接受了数据库查到的数据,然后对数据做处理:
 

 

  List<Map> usermaps = tBankMapper.selectUsers(year, mouth, name);
        for (Map map : usermaps) {
            String user_id = map.get("user_id").toString();
            String usersarary = map.get("usersarary").toString();
            String workdaynum = map.get("workdaynum").toString();//工作日
            BigDecimal bigDecimal = new BigDecimal(usersarary);
            BigDecimal bigDecimal1 = new BigDecimal(workdaynum);
//          日工资放进map
            BigDecimal daysalary = bigDecimal.divide(bigDecimal1, 2);
            map.put("daysalary", daysalary);
            String sectionAM = map.get("sectionAM").toString();
            String sectionPM = map.get("sectionPM").toString();
            BigDecimal multiplyAM = new BigDecimal(sectionAM).multiply(new BigDecimal(3.5));//上午小时数
            BigDecimal multiplyPM = new BigDecimal(sectionPM).multiply(new BigDecimal(4));//下午小时数
            BigDecimal add = multiplyAM.add(multiplyPM);//总小时数
            BigDecimal divide = add.divide(new BigDecimal(7.5), 2, BigDecimal.ROUND_HALF_DOWN);//漏刷天数
            BigDecimal subtract = new BigDecimal(workdaynum).subtract(divide);//到岗天数
            map.put("subtract", subtract);//到岗天数
            BigDecimal paidInWages = daysalary.multiply(subtract);//实到工资(到岗工资)
            map.put("paidInWages", paidInWages);//到岗工资
            TAttendRecord tAttendRecord = new TAttendRecord();


            tAttendRecord.setUserId(Long.valueOf(user_id));
            tAttendRecord.setYear(Long.valueOf(year));
            tAttendRecord.setMonth(Long.valueOf(mouth));
            //查询上午打卡时间
            List<Map> mapsAm = tAttendRecordMapper.selectClockam(tAttendRecord);
            //查询下午打卡时间
            List<Map> mapsPm = tAttendRecordMapper.selectClockpm(tAttendRecord);
            Long totalMinutes = 0L;//迟到总分钟数?

//        循环上午打卡信息
            for (Map mapAm : mapsAm) {
//                获取打卡时间
                String time = String.valueOf(mapAm.get("att_time"));
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                截取年月日
                String strsAm = time.substring(0, 10);//年月日
//                年月日拼接时间点
                strsAm += " 8:30:00";//年月日拼接时间
                try {
                    Date parse1 = formatter.parse(time.replace("T", " "));//打卡时间
                    Date parse = formatter.parse(strsAm);//Sting转date,时间字符串转时间格式  2022-08-01 08:30:00
                    Long datePoor = getDatePoor(parse1, parse);//因为打卡时间超过8点30,用打卡时间减去8点30,得到迟到分钟数
                    totalMinutes += datePoor;
                } catch (ParseException e) {
                    System.out.println(e.getMessage());
                    System.out.println("时间格式转换失败");
                }
            }
            //        循环下午打卡信息
            for (Map mapPm : mapsPm) {
//                获取打卡时间
                String time = String.valueOf(mapPm.get("att_time"));
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                截取年月日
                String strsPm = time.substring(0, 10);//年月日
//                年月日拼接时间点
                strsPm += " 18:00:00";//年月日拼接时间
                try {
                    //replace将”T”替换成空格“ ”
                    Date parse1 = formatter.parse(time.replace("T", " "));//打卡时间
                    Date parse = formatter.parse(strsPm);//Sting转date,时间字符串转时间格式  2022-08-01 08:30:00
                    Long datePoor = getDatePoor(parse, parse1);//因为打卡时间小于6:00,用6点减去打卡时间,得到早退分钟数
                    totalMinutes += datePoor;
                } catch (ParseException e) {
                    System.out.println("时间格式转换失败");
                }
            }
            BigDecimal multiply = new BigDecimal(totalMinutes).divide(new BigDecimal(30), 2).multiply(new BigDecimal(-100));
            //放入总迟扣除钱数
            map.put("multiply", multiply);
            BigDecimal should = paidInWages.subtract(multiply);//应付工资
            map.put("should", should);
            BigDecimal yanglao = new BigDecimal(map.get("yanglao").toString());
            BigDecimal gongshang = new BigDecimal(map.get("gongshang").toString());
            BigDecimal shiye = new BigDecimal(map.get("shiye").toString());
            BigDecimal yiliao = new BigDecimal(map.get("yiliao").toString());
            BigDecimal shengyu = new BigDecimal(map.get("shengyu").toString());
            BigDecimal gongjijin = new BigDecimal(map.get("gongjijin").toString());
            BigDecimal removeFive = should.subtract(yanglao).subtract(gongshang).subtract(shiye).subtract(yiliao).subtract(shengyu).subtract(gongjijin);
            map.put("removeFive", removeFive);//扣除五险一金后
            BigDecimal tax = new BigDecimal(map.get("tax").toString());
            map.put("removeTax", removeFive.subtract(tax));//实发
        }
        tBanks.put("usermaps", usermaps);
        return tBanks;
    }
 

 这就吧你要获取的数据全写出来,有的数据,需要计算,也在impl实现类里面写,

然后,

我们去controller,去做导出文件格式+放置内容处理

9.controller

    @Log(title = "企业账号信息", businessType = BusinessType.EXPORT)
    @GetMapping("/exportbank")
    @ResponseBody
    public void exportbank(HttpServletResponse response, String name, String year, String month) {
        Map map = tBankService.selectTBankListexport(year, month, name);
        String text = "ATNU:";
        text+=map.get("atnu").toString()+"\nMICN:";
        text+=map.get("micn").toString()+"\nCUNM:";
        text+=map.get("cunm").toString()+"\nMIAC:";
        text+=map.get("miac").toString()+"\nEYMD:";
        text+=map.get("eymd").toString()+"\n";
        List<Map> userList= (List<Map>) map.get("usermaps");
        text+="COUT:"+userList.size()+"\n";
        for(Map user:userList){
            text+=user.get("accountNumber").toString()+"|"+user.get("removeTax").toString()+"|"+user.get("user_name").toString()+"| |\n";
        }
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        response.setContentType("application/octet-stream;charset=UTF-8");
        try {
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode( year + "年" + month + "月"+name+".txt", "UTF-8"));
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes("UTF-8"));
            buff.flush();
            buff.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
 

到这一步,导出就结束了,希望下次遇到类似问题可以有所帮助。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序员3个月从月薪6k涨到15k,你知道我是怎么过来的吗?

(一). 基础 1. Java 基本功 Java 入门&#xff08;基础概念与常识&#xff09; Java 语法 基本数据类型 方法&#xff08;函数&#xff09; 2. Java 面向对象 类和对象 面向对象三大特征 修饰符 接口和抽象类 其它重要知识点 3. Java 核心技术 集合 异常 多线程 文…

Python——协程(Coroutine),异步IO

目录 生成器(Generator) yield表达式的使用 生产者和消费者模型 ​编辑 yield from表达式 协程(Coroutine) asyncio.coroutine async/await 总结 由于GIL的存在&#xff0c;导致Python多线程性能甚至比单线程更糟。 于是出现了协程&#xff08;Coroutine&#xff09;这…

Arduino UNO通过PCF8574串行IIC接口驱动LCD1602/LCD2004液晶屏

LCD1602/2004液晶屏简介 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。可以显示2行每行16个字符&#xff0c;总共32个字符。字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD&#xff0c;常用161&#xff0c;162&#xff0c;202和402等的模块。不…

Go编程项目实战教程

Go编程项目实战教程 在这个面向初学者的 Go 编程语言课程中&#xff0c;您将通过构建 11 个项目来提高您的 Go 编程技能 课程英文名&#xff1a;Learn Go Programming by Building 11 Projects – Full Course 此视频教程共21.0小时&#xff0c;中英双语字幕&#xff0c;画质…

数据之道读书笔记-07打造“数字孪生”的数据全量感知能力

数据之道读书笔记-07打造“数字孪生”的数据全量感知能力 在信息化时代构建的IT系统&#xff0c;基本上是功能化、烟囱化、封闭式的&#xff0c;只能给企业内部经过培训的专业人员使用&#xff0c;所有的决策数据和我们信任的IT系统基本都是靠人来录入数据。但是&#xff0c;人…

Android移动开发基础——实训项目:个人财务软件

目录 步骤 1. 项目计划 需求分析 程序流程图 2. 实现功能模块 2.1 登录模块 前提 软件&#xff1a;Android Studio开发工具、JDK1.8以上版本 目标&#xff1a;编写个人财务软件 步骤 &#xff08;1&#xff09;根据设计题目要求的指标&#xff0c;通过查阅有关资料…

某学生宿舍楼设计

目 录 1.建筑设计部分 1 1.1工程概况 1 1.2设计依据 2 1.3标高及建筑细部作法 2 1.4平面设计 2 1.4.1建筑方案设计 2 1.4.2建筑做法 4 1.4.3 建筑设计成果 6 2.结构设计部分 7 2.1结构平面设计 7 2.2构件截面尺寸的初步确定 8 2.3荷载统计 10 2.3.1楼屋面及卫生间恒活计算 10 2…

热加载技术:修改Python代码并实时查看结果 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/406 &#x1f4e2; 声明&#xff1a;版权所有&#xf…

基于MindSpore框架的道路场景语义分割方法研究

概述 本文以华为最新国产深度学习框架Mindspore为基础&#xff0c;将城市道路下的实况图片解析作为任务背景&#xff0c;以复杂城市道路进行高精度的语义分割为任务目标&#xff0c;对上述难处进行探究并提出相应方案&#xff0c;成功地在Cityscapes数据集上完成了语义分割任务…

vue3+ts做echarts做一个简单的折线渐变图

vue3做echarts做一个简单的折线渐变图 效果 代码&#xff1a; </template> <div><div class"date-change"><el-date-picker size"small" v-model"dateValue" value-format"YYYY-MM-DD" type"daterange&qu…

Leetcode 72. 编辑距离

最近在写dp问题的时候&#xff0c;写到这个经典题&#xff0c;对于里面三个转换方程没太懂&#xff0c;偶然在评论区找到一个非常非常清楚的解释&#xff0c;顺便就把这道题记录一下&#xff0c;加上自己的理解&#xff0c;方便日后查看! 对于这一类的dp习惯性的都初始化dp的大…

好用的数据恢复软件EasyRecovery2023最新版

实用的数据恢复软件有什么&#xff1f;电脑中的数据文件对很多的小伙伴来说都是非常重要的&#xff0c;在下载安装新的软件设备时都需要非常谨慎&#xff0c;一旦碰到一些病毒就可能会导致文件丢失&#xff0c;想要恢复这些文件并不是很容易&#xff0c;需要使用专业的数据恢复…

proxy

let obj new Proxy({},{get: function(target,propKey,receiver) {console.log(获取的时候会被拦截)console.log(target,propKey,receiver)return Reflect.get(target,propKey,receiver)},set: function(target,propKey,value,receiver) {console.log(设置时被拦截);console.l…

Java开发:JVM篇-类加载内存分析

一、类加载器 A、类加载器的作用 将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据结构转换成方法区的运行时数据结构&#xff0c;然后在堆中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法区中类数据的访问入口。 B、类缓存 标准的JavaSE类…

收到公安部门的致谢信,顶象业务安全“反诈”再接再厉

12月1日&#xff0c;《反电信网络诈骗法》正式施行&#xff0c;为反电信网络诈骗工作提供有力法律支撑。自2021年以来&#xff0c;顶象业务安全情报通过多渠道的风险数据以及多维度深度挖掘与分析&#xff0c;助力对电信诈骗分子的精准防控&#xff0c;已为多个监管机构的反电信…

小程序开发--- 03组件

小程序中组件的分类主要有以下9类&#xff1a; 常用的视图容器类是组件有&#xff1a; 1.view : 这是普通的视图区域&#xff0c;类似于HTML中的div&#xff0c;是一个块级元素&#xff0c;常用来实现页面的布局效果 2. scroll-view: 是一个可以上下或者左右滚动的区域&#x…

数据结构—set集合

文章目录一、HashSet集合1.HashSet集合的特点2.HashSet常用方法二、LinkedHashSet集合LinkedHashSet集合的特点三、TreeSet集合1.TreeSet集合的特点2.TreeSet的基本使用四、HashSet、LinkedHashSet、TreeSet的使用场景HashSet:LinkedHashSet&#xff1a;TreeSet:五、list和set集…

flutter 自定义加载中间页 loading 菊花组件的封装

flutter 自定义加载中间页前言LoadingStateWidget 封装思路总结前言 在日常移动开发中&#xff0c;很多时候需要我们添加一个加载中间页&#xff0c;即加载中&#xff0c;加载失败&#xff0c;加载重试&#xff0c;加载完成等功能&#xff0c;这样可以避免在无网或者弱网情况下…

《痞子衡嵌入式半月刊》 第 64 期

痞子衡嵌入式半月刊&#xff1a; 第 64 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目&#xff08;GitHub: JayHeng/pzh-mcu-bi-weekly&#xff09;&#xff0c;欢…

【GD32F427开发板试用】IAR 环境移植freertos

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;andeyqi freertos移植适配 社区之前已经有同学移植适配freertos&#xff0c;在GD32F427上跑了起来&#xff0c;之前的帖子是在MDK环境下适配的…