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
.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过滤器的创建与使用
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日期类型的大小比较