1.连接超时:
2.getOutputStream()被占用:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
下载PDF文件时报错,HttpResponse response在方法的参数列表里面,请求并没有进入控制器,将HttpResponse response设置成成员变量自动注入之后,报以下错误:
3.没有导入合同模板文件:
freemarker.template.TemplateNotFoundException: Template not found for name “Test.ftl”.
The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = org.springframework.ui.freemarker.SpringTemplateLoader@59862826, loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)).
解决:
添加template目录,在下面新增Test.ftl和Test.ft2两个文件
4.合同模板中,日期转化成字符串报错:
在要转化的字段中添加以下注解:
?string(“yyyy-MM-dd HH:mm:ss”)
5.字体找不到问题:
在dao层的resource目录下放字体的文件,即可解决
6.前端传字符串,后端转化成Date类型的时间问题:
在对应的属性上面添加注解即可解决
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
7.字符串转日期:
8.日期转字符串(解决时间不一致问题):
框架协议
时间不一致问题:查询出来的数据中,时间比数据库里的时间慢了八个小时
在model类里面用字符串类型的***DateModel,前端日期给validityEndDate,然后通过DateUtils将validityEndDate转换成字符串类型赋值给endDate,前端取值显示的时候就取endDate显示
新增的时候前端传字符串类型的日期参数,然后通过以下方式转换成Date类型
9.导出Excel文件:
海运结算单管理
从db_sys库里面的t_column表中找form_id为form_payable_settlement
且grid_id为grid1的所有数据,作为导出Excel文件的列名
10.文件上传:
LINUX环境下不加”/”会报错,因为temp目录是临时目录,长时间没用会被删除,会找不到目录
11.字符串转时间格式(长度要对应):
12.生成userId:
//生成新的userId
TCodeRule codeRule = new TCodeRule();
codeRule.setPlatId("");
codeRule.setSeqTypeId(CodeRuleEnum.USER_ID.getCode());
codeRule.setSize(1);
String userId = generatorCodeForMysql.GeneratorCode(codeRule);
tUserModel.setUserId(userId);
13.生成公司id:
/**
* 生成公司id
* @param key
* @param i
* @return
*/
private String getGeneratorId(String key, int i) {
TCodeRule codeRule = new TCodeRule();
codeRule.setPlatId("");
codeRule.setSeqTypeId(CodeRuleEnum.COMPANY_NUMBER.getCode());
codeRule.setSize(i);
String companyId = generatorCodeForMysql.GeneratorCode(codeRule);
return companyId;
}
14.调用外部接口:
/**
* post请求封装
* @param url
* @param data
* @return
*/
public ResultDto doPost(String url,Object data){
HttpHeaders headers = new HttpHeaders();
//请求头设置
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Object> requestEntity = new HttpEntity<>(data, headers);
return restTemplate.postForObject(url, requestEntity, ResultDto.class);
}
15.高级查询
高级查询SQL语句里面不能写page,要写start。代表从第几条开始,而不是第几页,一般默认从第0条开始查询
16.生成结算单id
17.保留两位小数
java使double保留两位小数的多方法 java保留两位小数_java_脚本之家 (jb51.net)
Double四舍五入保留两位小数,转化成String:
18.调FeignClient接口
19.定时任务
测试地址:
http://192.168.1.70:8091/job/insertJob
正式地址:
http://172.16.30.216:8091/job/insertJob
{
“id”:17,
“methodSys”:“CALCULATION”,
“methodName”:“UPDATE_STATUS_CONTRACT”,
“methodUrl”:“http://192.168.1.70:8099/outlineAgreement/updateStatus”,
“cronExpression”:"0 0/2 * * * ? "
}
20.查询当前日期在有效期内的数据:
方法一:
SELECT
*
FROM
db_sys.t_trans_outprice
WHERE
company_id = 'C000000885'
AND segment_id = '025'
AND prod_kind_price = '无缝热镀管'
AND province = '370000000'
AND city = '370200000'
AND NOW() BETWEEN start_date AND date_add(end_date,INTERVAL 1 DAY )
ORDER BY
total_price ASC
方法二:
SELECT
*
FROM
db_sys.t_trans_outprice
WHERE
company_id = 'C000000885'
AND segment_id = '025'
AND prod_kind_price = '无缝热镀管'
AND province = '370000000'
AND city = '370200000'
AND datediff(start_date, NOW())<0
AND datediff(end_date, NOW())>0
ORDER BY
total_price ASC
21.打印PDF通用方法:
private void print(String templateName, List<Map<String, Object>> listVars) throws Exception {
//防止乱码,设置HttpServletResponse编码
response.setCharacterEncoding("utf-8");
//设置页面禁止缓存
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ByteArrayOutputStream byteArrayOutputStream =
PdfUtils.generatePDF(freeMarkerConfigurer, templateName, listVars);
byteArrayOutputStream.writeTo(response.getOutputStream());
response.getOutputStream().flush();
}
22.对Map进行排序(转化为list进行操作)
Map<String,Integer> map = new HashMap<>();
List<String> list = new ArrayList<>(map.keySet());
Collections.sort(list, (a, b) -> map.get(b) - map.get(a));
map.entrySet().forEach(entry -> System.out.println(String.format("%s=%s", entry.getKey(), entry.getValue())));
23.BigDecimal 类型数据进行加减乘除法:
Java BigDecimal类型的 加减乘除运算不能像C#一样简单,需要调用方法:
加法:add
减法:subtract
乘法:multiply
除法:divide
可参考下面代码:
BigDecimal bignum1 = new BigDecimal("10");
BigDecimal bignum2 = new BigDecimal("5");
BigDecimal bignum3 = null;
//加法
bignum3 = bignum1.add(bignum2);
System.out.println("求和:" + bignum3);
//减法
bignum3 = bignum1.subtract(bignum2);
System.out.println("求差:" + bignum3);
//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println("乘法积:" + bignum3);
//除法
bignum3 = bignum1.divide(bignum2);
System.out.println("除法结果:" + bignum3);
24.导出Excel文件金额保留两位小数
model.setRevSettlePrice(EmptyUtil.isEmpty(model.getRevSettlePrice())? "0.00": new BigDecimal(model.getRevSettlePrice()).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
model.setRevTotAmount(EmptyUtil.isEmpty(model.getRevTotAmount())? "0.00":new BigDecimal(model.getRevTotAmount()).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
model.setPaySettlePrice(EmptyUtil.isEmpty(model.getPaySettlePrice())? "0.00":new BigDecimal(model.getPaySettlePrice()).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
model.setPayTotAmount(EmptyUtil.isEmpty(model.getPayTotAmount())? "0.00":new BigDecimal(model.getPayTotAmount()).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
25.调用Jcos
方法一:
方法二:
//调用(方法一)
//Result result = jcosFeignClient.queryWaybillReview(object);
// TWaybillSendModel model1 = JSONObject.parseObject(JSONObject.toJSONString(result.getData()), TWaybillSendModel.class);
方法二:

//调用jcos 我家接口 (方法二)
JcosResult s = this.postCall(object, jcosUrl + queryCapacityApprovalStatusWojia);
TWaybillSendModel model1 = JSONObject.parseObject(JSONObject.toJSONString(s.getData()), TWaybillSendModel.class);
/**
* 数据发送
*/
@Override
public JcosResult postCall(Object param, String url) {
try {
HttpHeaders headers = new HttpHeaders();
//请求头设置
headers.setContentType(MediaType.APPLICATION_JSON);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
HttpEntity<Object> requestEntity = new HttpEntity<Object>(param, headers);
logger.info("==============================调用 " + url + " start=================================");
logger.info("传输报文 :" + JSON.toJSONString(requestEntity));
JcosResult result = restTemplate.postForObject(url, requestEntity, JcosResult.class);
logger.info("返回报文 :" + JSON.toJSONString(result));
logger.info("==============================调用 " + url + " end====================================");
return result;
} catch (Exception e) {
e.printStackTrace();
logger.info(e.getMessage());
throw new MyException(ResultEnum.ERROR.getCode(), e.getMessage());
}
}
26.迭代器,移除集合元素:
List<BclpBillOfLoadingNoModel> recordByDate = lmsBclpLoadingDao.getRecordByDate(bclpBillOfLoadingNoModel);
Iterator<BclpBillOfLoadingNoModel> iterator = recordByDate.iterator();
while (iterator.hasNext()) {
BclpBillOfLoadingNoModel next = iterator.next();
if (ProdCompanyNameLimit.containsLimitName(next.getProdCompany())) {
iterator.remove();
}
}
27.高级查询分页设置起始条数
modelNew.setStart((modelNew.getPage()-1)*modelNew.getLength());
28.查询数据库的时候求和并取余:
29.steam的map和collectors操作
List<String> collect= roleButtonsTarget.stream().map(TFormButtonModel::getRowid).collect(Collectors.toList());
Map<Integer, List<String>> map =list.stream().sorted(Comparator.comparing(String::length)).collect(Collectors.groupingBy(String::length));
30.String.join()方法和Collectors.joining()方法:
List<String> repeatLine = new ArrayList<>();
repeatLine.add("1");
repeatLine.add("2");
repeatLine.add("3");
repeatLine.add("4");
repeatLine.add("5");
String collect = repeatLine.stream().collect(Collectors.joining(","));
System.out.println("collect:"+collect);
String b = "'"+String.join("!",repeatLine)+"'";
//字符串数组
String[] strArray = new String[]{"ni","zhen","hao","kan"};
//第2个参数是字符串数组
String a = String.join("!",strArray);
//第1个参数之后是多个字符串
String c = String.join("!","ni","zhen","hao","kan");
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
结果:在每个元素中间拼接一个占位符:
collect:1,2,3,4,5
a:ni!zhen!hao!kan
b:'1!2!3!4!5'
c:ni!zhen!hao!kan
31:list分页
(1)工具类ListUtils.split()
List<List> split = ListUtils.split(param.getPalletModelList());
split.forEach(item-> palletDao.insertPalletBatch(item));
把大集合拆分成多个小集合,可以输入第二个参数作为小集合的大小
(2)google的guava工具
用的google的guava工具中的Lists.partition方法,用它来做分页
32.集合过滤找到符合条件的一条元素:
TOrderTransport transport = transportById.stream()
.filter(item1 -> Objects.equals(item.get("boatCode"), item1.getBoatId()))
.findFirst().orElse(null);
33.MySQL中concat case when的使用:
SELECT
t.order_no,
t.pallet_no,
t.trans_type,
tp.supply_type,
t.status,
concat( tp.start_province, tp.start_city, tp.start_address, '->', tp.end_province, tp.end_city, tp.end_address ) AS line,
ts.`name` AS trans_type_name,
ts1.`name` AS status_name,
tp.product_name,
case when tp.total_weight=-1 then '--' else (tp.total_weight-IFNULL(tp.receive_weight,0)) end AS allow_weight,
case when t.this_weight=-1 then '-1' else t.this_weight end AS this_weight,
tb.company_name AS carrier_company_name,
t.contacts,
t.contact_phone,
tu.`name` as application_name,
tu.mobile as application_phone,
t.application_date,
case when tp.total_weight=-1 then '运量待定' else tp.total_weight end AS total_weight,
tp.receive_weight,
tp.ship_requirements,
concat(
concat(cast(year(t.load_date_start) as char),'年',cast(month(t.load_date_start) as char),'月',cast(day(t.load_date_start) as char),'日'), '~',
IFNULL(concat(cast(year(t.load_date_end) as char),'年',cast(month(t.load_date_end) as char),'月',cast(day(t.load_date_end) as char),'日'), '' )
) AS load_date_start,
concat(
concat(cast(year(t.pallet_date_start) as char),'年',cast(month(t.pallet_date_start) as char),'月',cast(day(t.pallet_date_start) as char),'日'), '~',
IFNULL(concat(cast(year(t.pallet_date_end) as char),'年',cast(month(t.pallet_date_end) as char),'月',cast(day(t.pallet_date_end) as char),'日'), '' )
) AS pallet_date_start,
tp.load_days,
(case tp.price_type
WHEN 'JGLX10' THEN
concat( t.report_price, ts4.`name`, '/吨(', ts2.`name`,')' )
WHEN 'JGLX20' THEN
concat( t.report_price, ts4.`name`, '/吨(', ts2.`name`,')' )
WHEN 'JGLX30' THEN
ts3.`name`
else '' end
)as unit_price
FROM
<include refid="select-tables"></include>
WHERE
t.order_no=#{orderNo}
34.MySQL 取得两个时间相差的分钟数 及 常用时间函数
– 取得相隔秒数
SELECT UNIX_TIMESTAMP('2012-06-09 00:10:11')-UNIX_TIMESTAMP('2012-06-09 00:09:12')
– 取得相隔分钟数
SELECT round((UNIX_TIMESTAMP('2012-06-09 00:10:11')-UNIX_TIMESTAMP('2012-06-09 00:09:12'))/60)