java工作随笔

        String s = JSONObject.toJSONString(fixedAsset);
        logger.error("-----------------8------------------" + s);
        CusFixedAssettDTO CusFixedAssettDTO3 = JSONObject.parseObject(s, CusFixedAssettDTO.class);

父类转子类

相同对象合并

import java.util.Date;
@Data
@ToString(callSuper=true)
@EqualsAndHashCode(callSuper = true)
public class CusFixedAssetsDTO extends FixedAssetDTO {
    @ApiModelProperty(value = "计数单位")
    


//解决相同对象在select赋值之后互相为空的情况,将两个对象合并
    private CusFixedAssettDTO combineSydwCore(CusFixedAssettDTO sourceBean,CusFixedAssettDTO targetBean){
        Class sourceBeanClass = sourceBean.getClass();//sourceBean.getClass().getSuperclass();获取父类
        Class targetBeanClass = targetBean.getClass();
        Field[] sourceFields = sourceBeanClass.getDeclaredFields();
        Field[] targetFields = targetBeanClass.getDeclaredFields();
        for(int i=0; i<sourceFields.length; i++){
            Field sourceField = sourceFields[i];
            if(Modifier.isStatic(sourceField.getModifiers())){
                continue;
            }
            Field targetField = targetFields[i];
            if(Modifier.isStatic(targetField.getModifiers())){
                continue;
            }
            sourceField.setAccessible(true);
            targetField.setAccessible(true);
            try {
                //if( !(sourceField.get(sourceBean) == null) &&  !"serialVersionUID".equals(sourceField.getName().toString())){ targetField.set(targetBean,sourceField.get(sourceBean));}
                if(sourceField.get(sourceBean) == null){
                    sourceField.set(sourceBean,sourceField.get(targetBean));
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return sourceBean;
    }

循环list对象

        JSONArray array = JSONObject.parseArray(otOutput); // json字符串转json数组
 for(Object object:content){
            //String s = String.valueOf(object);
            String body = JSONObject.toJSONString(object);
            Object parse1 = JSON.parse(body);
            String s = parse1.toString();
            Asset asset1 = JSON.parseObject(s, Asset.class);

[root@localhost logs]# cd /home/hzero/jar/logs
tail -f alm-origin.log

tail -500f ./dev-environment/bangpu/bp-alm-origin/target/app.log

/*
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("Content-Type","application/json;charset=utf-8");
        httpPost.setHeader("X-ECC-Current-Tenant","10000");
        httpPost.setHeader("Accept-Language","zh-CHS");
        //加账号密码//
        String encoding = null;
        try {
            encoding = DatatypeConverter.printBase64Binary("[email protected]:WGwg@1928".getBytes("UTF-8" ));  //username  password 自行修改  中间":"不可少
        } catch (
                UnsupportedEncodingException e) {
            // 如果系统不支持UTF-8编码,会捕获到UnsupportedEncodingException:
            System.out.println(e); // 打印异常信息
        }
        httpPost.setHeader("Authorization", "Basic " + encoding);
        //加账号密码end//
        StringEntity se = new StringEntity(jsonPrarms, "utf-8");
        httpPost.setEntity(se);

        CloseableHttpClient httpClient = HttpClientBuilder.create().build();   //获取浏览器信息
        HttpResponse response = null;
        try {
            response = httpClient.execute(httpPost);
        } catch (IOException e) {
            e.printStackTrace();
        }
        StatusLine statusLine = response.getStatusLine();   //获取请求对象中的响应行对象
        int responseCode = statusLine.getStatusCode();
        StringBuffer jsonString = new StringBuffer();
        if (responseCode == 200) {
            BufferedReader bufferedReader = null;
            try {
                bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            } catch (IOException e) {
                e.printStackTrace();
            }
            String line;
            try {
                while((line = bufferedReader.readLine()) != null) {
                    jsonString.append(line);//拼接字符串
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
*/
//        System.out.print(jsonString.toString());
//        JSONObject jsonResult = null;
//        if (responseCode == 200) {
//            String str = "";
//            try {
//                //读取服务器返回过来的json字符串数据
//                str = EntityUtils.toString(response.getEntity());
//                //把json字符串转换成json对象
//                //导入import com.alibaba.fastjson.JSONObject;不然报错(不行试试import net.sf.json.JSONObject;)
//                jsonResult = JSONObject.parseObject(str);
//                System.out.print("jsonResult");
//            } catch (Exception e) {
//                jsonResult = JSONObject.parseObject("字符串错误!");
//            }
//        }
        //return result;

查询表结构
select column_name, column_comment from information_schema.columns where table_name = ‘arm_gift’ ;

json处理
https://blog.csdn.net/JavaSupeMan/article/details/123919039

maven库中包找不到:(前提是仓库中有jar文件!!!!)
1.删除仓库中所有的.repositories和.lastUpdated文件
2.项目中执行clean
3.项目中删除.idea文件
4.项目中删除.iml文件
5.重新打开项目
6.如果失败
7.打开idea查看setting文件的指定库是否正确
这里idea有个脑残bug在这里插入图片描述
在你每次新打开一个项目时他会默认找maven中写的xml文件,这时如果你新确定了一个文件但是你没有在idea中来的及改,会导致你会生成两个仓库,所以一定注意仓库指定路径!!!
8.如错误再来一遍
9.如正确删除库重新导包

微服务项目的跨库查询数据:https://www.cnblogs.com/east7/p/15731636.html

一个接口有多个实现类时,调用接口时,如何判定调用的哪个实现类?https://blog.csdn.net/zhanduo0118/article/details/120116160

CusAssetDTO 是asset类的子类:实现父子转换:
CusAssetDTO cusAssetDto = CommonConverter.beanConvert(CusAssetDTO.class, asset);

导出excel

1.在导出的DTO类上,使用@ExcelSheet标注导出的Sheet,头行结构中,行上也需要使用该注解标注。在@ExcelSheet中,可配置导出Sheet的标题,分页查询大小等,基本不需配置,使用默认的即可。
2在导出DTO类中,在需要作为导出列的字段上,使用@ExcelColumn标注,该注解可配置列标题、显示顺序等。
Example:
@ExcelSheet(zh = “收货记录”, en = “Receiving record”)
public class ReveRecodeDTO {
@ExcelColumn(zh = “事务编号”, en = “trxNum”, showInChildren=true)
private String trxNum;
@ExcelColumn(zh = “客户”, en = “companyName”, groups = {Group2.class})
private String companyName;
@ExcelColumn(zh = “物品编码”, en = “itemCode”, order = 4, groups = {Group1.class})
private String itemCode;
@ExcelColumn(zh = “物品名称”, en = “itemName”, order = 3, groups = {Group1.class})
private String itemName;
@ExcelColumn(zh = “日期”, en = “trxDate”, pattern = BaseConstants.Pattern.DATE)
private Date trxDate;
@ExcelColumn(zh = “数量”, en = “quantity”, groups = {Group2.class})
private BigDecimal quantity;
@ExcelColumn(zh = “金额”, en = “netAmount”, pattern = BaseConstants.Pattern.TB_ONE_DECIMAL)
private BigDecimal netAmount;
@ExcelColumn(zh = “原因”, en = “moveReason”)
private String moveReason;
@ExcelColumn(zh = “接收人”, en = “receiptPerson”)
private String receiptPerson;
@ExcelColumn(zh = “备注”, en = “remark”, renders = RemarkValueRenderer.class)
private String remark;
@ExcelColumn(zh = “详情列表”, en = “detailsList”, child = true)
List detailsList;

public interface Group1 {}

public interface Group2 {}

public class RemarkValueRenderer implements ValueRenderer {
    @Override
    public Object render(Object value, Object data) {
        RecordLineDTO dto = (RecordLineDTO) data;
        return "显示备注:" + dto.remark;
    }
}

// getter/setter

}

3.在导出接口上,使用@ExcelExport标注,注解需配置导出的DTO。
Example:
@GetMapping(“/export”)
@ExcelExport(ReveRecodeDTO.class)
public ResponseEntity export(ReveRecodeDTO record, ExportParam exportParam, HttpServletResponse response, PageRequest pageRequest) {
List list = repository.export(record, exportParam, pageRequest);
return Results.success(list);
}

固定值集

1.固定值集获取
List queryLovValue(String lovCode, Long tenanId)

2.固定值集翻译
目标方法上使用 @ProcessLovValue(targetField = BaseConstants.FIELD_BODY)
目标对象上使用 @LovValue(lovCode = “SPFM.COMPANY_PROCESS_STATUS”)
并添加翻译字段eg:
@LovValue(lovCode = “SPFM.COMPANY_PROCESS_STATUS”)
private ProcessStatus processStatus;
private String processStatusMeaning;

方法上
@ProcessLovValue

dto上
    @RemoteField(fieldType = AlmOrgCommand.class, meaningField = "usingOrgName")
    private Long usingOrgId;

    @RemoteField(fieldType = AssetStatusCommand.class, meaningField = "assetStatusName")
    private Long assetStatusId;

    @RemoteField(fieldType = EmployeeCommand.class, meaningField = "userPersonName")
    private Long userPersonId;

编码规则

1.使用说明
org.hzero.boot.platform.code.builder.CodeRuleBuilder#generateCode
参数具体意思如下:
参数名称
参数描述
level 应用维度,可选值:PLATFORM/TENANT/COMPANY
tenantId 租户ID
ruleCode 编码编码
levelCode 编码规则层级,可选值:GLOBAL/COMPANY
levelValue 编码规则层级值
variableMap 变量替换列表

加上这个注解,不然刷不出来
@Permission(level = ResourceLevel.ORGANIZATION)

excel导入
@Override
@Transactional(rollbackFor = Exception.class)
public void importSupplierByTemplate(Long organizationId, Long projectId, Long purchaseTemplateId, MultipartFile multipartFile) {
//1.校验文件和单据
List projectPackages = validateUploadFileAndDoc(organizationId, projectId, multipartFile);
//2.根据询价单号将采购包集合转为Map
Map rfxNumPackageMap = projectPackages.stream().filter(pack -> Objects.nonNull(pack.getPackageCode()))
.collect(Collectors.toMap(PurchaseProjectPackage::getPackageCode, Function.identity()));
//3.读取Excel文件
try {
EasyExcel.read(multipartFile.getInputStream(), RfxLineSupImpTemplateDTO.class,
new RfxLineSupImportListener(purchaseTemplateId, lineSupplierService, rfxLineItemRepository,
customCommonQueryRepository, rfxNumPackageMap)).sheet().doRead();
} catch (IOException e) {
throw new CommonException(“供应商批量导入失败” + e.getMessage());
}
}

redis
背景:redis的火,就像java一样,对于测试人员来说,使用它就需要好好搞下,现在就整理下命令行模式,来查询获取自己想要的值;

命令行连接命令:redis-cli -h 主机名 -p 端口号 -a 密码

1、keys key值,如keys 1153331

keys 值会找到很多对应的keys,通过get方法,就可以得到很多value;

2、下面整理下redis常见的命令

a、对string类型数据的操作:set key value ,把名称为key的值赋值为value

                                            get key   返回名称为key的value

b、对list的数据类型操作:rpush key value 在名称为key的list尾部添加一个value的值

                                        lpush key value   在名称为key 的list头部添加一个value的值;

                                        llen  key     返回名称为key的list长度

                                        lrange  key start  end  返回名称为key的list中start到end的值

                                        lset key index value  给名称为key的list中索引为index的值赋值为value

c 、对hash数据类型的操作:hset key field value 向名称为key的hash中添加元素field <—>value

                                            get key field     返回名称为key的hash中field对应的value值

                                            hgetall     返回名称为key的hash中所有键(field)及其对应的value值

                                           hlen key:返回名称为key的hash中元素个数
                                          ◼ hdel key field:删除名称为key的hash中键为field的域

d、redis的常用命令 :exists key 确认一个key 是否存在

                                 del  key  删除一个key

                                 type  key  返回值的类型

                                dbsize    返回当前数据库key的数目

                               keys  pattern 返回满足pattern的所有key

                             select dbindex 切换数据库

                            flushdb   删除所有的key值  ,小心操作

e、redis的持久化;

        redis的持久化就是将redis的数据内存存储到物理内存上;

       2种持久化的方式;

       1、rdb  在指定的时间间隔内将内存中的数据集快照写入磁盘

          优点:性能最大话,如果数据集很大,rdb的启动效率很高

          缺点:数据安全性差

       2、aof   以日志的形式记录服务器每一个写、删除操作,查询操作不会被记录;

          优点:数据安全性好

          缺点:对于相同数量的数量集而言,AOF文件通常要大于RDB文件。恢复数据慢

f、多实例部署和主从配置后面再说

六、Redis 多数据库常用命令
Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。
多数据库相互独立,互不干扰。
#多数据库间切换
select 序号
使用 redis-cli 连接 Redis 数据库后,默认使用的是序号为 0 的数据库。
1
2
3
#多数据库间移动数据
move 键值 序号
例:
select 1
get lucien

select 0
get lucien

move lucien 1
get lucien

select 5
get lic

select 0
get lucien
清除数据库内数据
FLUSHDB :清空当前数据库数据
FLUSHALL :清空所有数据库的数据,慎用!

java工作随笔_第1张图片

过滤器小结:
Java过滤器的创建与使用
Java Web之过滤器Filter
JavaWeb之监听器Listener
Spring MVC过滤器-超类

http的获取处理
HttpServletRequest接口详解(还有其他的)

javascript中new url()属性,轻松解析url地址


1.首先写一个假的地址(q=URLUtils.searchParams&topic=api)相当于当前的window.location.href
复制代码
const urlParams = new URL(window.location.href);
urlParams.searchParams.has("topic") === true; // true
urlParams.searchParams.get("topic") === "api"; // true
urlParams.searchParams.getAll("topic"); // ["api"]
urlParams.searchParams.get("foo") === ""; // true
urlParams.searchParams.append("topic", "webdev");
urlParams.searchParams.toString(); // "q=URLUtils.searchParams&topic=api&topic=webdev"
urlParams.searchParams.set("topic", "More webdev");
urlParams.searchParams.toString(); // "q=URLUtils.searchParams&topic=More+webdev"
urlParams.searchParams.delete("topic");
urlParams.searchParams.toString(); // "q=URLUtils.searchParams"
复制代码
是不是很好用?参考(https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams#%E7%A4%BA%E4%BE%8B)

url简单加密:java中URLEncode和URLDecode

Java解析或生成xml字符串的各种方法

Java字符串常用操作

mybatis的通用Mapper函数库以及Example条件函数总结记录

SpringBoot Controller接收参数的几种常用方式
JAVA重定向:
JAVA重定向的几种方法
response.sendRedirect()实现重定向
SpringMVC重定向视图RedirectView分析

字符串(String与日期的转换(Date)

java中Date日期类型的大小比较

你可能感兴趣的:(java,windows,开发语言)