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("sap_dev2023@163.com: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 {@Overridepublic 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;
方法上
@ProcessLovValuedto上@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<String, PurchaseProjectPackage> 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  删除一个keytype  key  返回值的类型dbsize    返回当前数据库key的数目keys  pattern 返回满足pattern的所有keyselect 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过滤器的创建与使用
 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日期类型的大小比较