1.MyBatis逆向工程教程
https://blog.youkuaiyun.com/qq_41861558/article/details/100972934
2.springboot封装统一查询对象进行多条件查询案例
https://blog.youkuaiyun.com/qq_41358574/article/details/120986617
3.自动注解- 自动注解视频教程 -Java反射与自定义注解底层原理
https://www.bilibili.com/video/BV1ef4y1x794/?p=8&spm_id_from=pageDriver&vd_source=cc33f383cf7c5036af7b948bf7c1def1
3.1 自动分页查询jsh-erp程序流程:首先jsh使用的是统一封装查询进行的多条件查询,直接参考2。下面介绍一下软件运行流程
controller层
进入server
在这里实现不同的查询
进入接口
接着初始化的时候使用一个自定义注解 。在查询的时候返回一个IcomonQuery的接口 3跳到对应的自动注解。
4.jsh-erp 商品管理下面的商品信息无法list出来
原因是SELECT、HAVING、ORDER后的非聚合字段必须和GROUP BY后的字段保持完全一致。
查询源码报警如下
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Expression #25 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jsh_erp.me.bar_code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
### The error may exist in file [D:\HS自开发软件\JSH_ERP-master\JSH_ERP-master\jshERP-boot\target\classes\mapper_xml\MaterialMapperEx.xml]
### The error may involve com.jsh.erp.datasource.mappers.MaterialMapperEx.selectByConditionMaterial-Inline
### The error occurred while setting parameters
### SQL: SELECT m.*, u.name unitName, mc.name categoryName, me.bar_code, me.purchase_decimal, me.commodity_decimal, me.wholesale_decimal, me.low_decimal, me.sku FROM jsh_material m LEFT JOIN jsh_material_extend me ON me.tenant_id = 63 AND m.id = me.material_id AND ifnull(me.delete_Flag, '0') != '1' LEFT JOIN jsh_unit u ON u.tenant_id = 63 AND m.unit_id = u.id AND ifnull(u.delete_Flag, '0') != '1' LEFT JOIN jsh_material_category mc ON mc.tenant_id = 63 AND m.category_id = mc.id AND ifnull(mc.delete_Flag, '0') != '1' WHERE m.tenant_id = 63 AND 1 = 1 AND (me.bar_code LIKE ? OR m.name LIKE ? OR m.standard LIKE ? OR m.model LIKE ?) AND m.category_id IN (?, ?) AND ifnull(m.delete_flag, '0') != '1' GROUP BY m.id ORDER BY m.id DESC LIMIT ?, ?
### Cause: java.sql.SQLSyntaxErrorException: Expression #25 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jsh_erp.me.bar_code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Expression #25 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jsh_erp.me.bar_code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决办法
临时解决办法:mysql新版本的问题,我的做法是在mysql conf文件中 在sql_mode里去掉only_full_group_by
在idea跳转到当前查询控制台输入`select @@global.sql_mode`查询当前模式有哪些,然后去掉only_full_group_by输入
```
set global sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
或者
set @@sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
永久解决办法:在ideamqsql控制台输入SHOW VARIABLES LIKE 'datadir';
查看安装本地安装路径,接着在路径中修改my.ini
文件的sql-mode
去掉only_full_group_by
5.update更新商品信息失败
解决方案:单步调试查询代码,在updateMaterial-》 materialExtendService.saveDetials-》saveDetials中
if (null != deletedJson ) {
StringBuffer bf=new StringBuffer();
for (int i = 0; i < deletedJson.size(); i++) {
bf.append(deletedJson.getString(i));
if(i<(deletedJson.size()-1)){
bf.append(",");
}
}
this.batchDeleteMaterialExtendByIds(bf.toString(), request);
}
前面JSONArray deletedJson = obj.getJSONArray(“meDeleteIdList”);查询获取前端传入了一个deletedJson的json结构。发现这里面根本没有值deletedJson的size为0 但是依然进入了在上图的代码中。则在 for (int i = 0; i < deletedJson.size(); i++) 中0<0报警并且this.batchDeleteMaterialExtendByIds(bf.toString(), request);抛出异常给前端了修改为
if (null != deletedJson && deletedJson.size()!=0) {
StringBuffer bf=new StringBuffer();
for (int i = 0; i < deletedJson.size(); i++) {
bf.append(deletedJson.getString(i));
if(i<(deletedJson.size()-1)){
bf.append(",");
}
}
this.batchDeleteMaterialExtendByIds(bf.toString(), request);
}
即可
6.若以框架使用代码生成添加子模块前端报错Error: Request failed with status code 404 No message available
分析原因:
自己设置修改了packageName: com.ruoyi.mes
原本为packageName: com.ruoyi.system
然后自己在com.ruyi下面加入了子模块mes ,虽然包路径也是ruoyi.com但是还是需要在RuoYiApplication上面添加@ComponentScan("com.ruoyi.*")
可以参考https://blog.youkuaiyun.com/ordinary_brony/article/details/138320696解决
7.ruoyi 框架添加表格多sheet导出
在需要导出的类上面加入
@ExcelIgnoreUnannotated
@ColumnWidth(16)
@HeadRowHeight(14)
@HeadFontStyle(fontHeightInPoints = 11)
变量上面修改原本的@@Excel(name= “入库单编号”) 为@ExcelProperty(value = "入库单编号")
修改controller的export函数
@PreAuthorize("@ss.hasPermi('warehouse:proPick:export')")
@Log(title = "生产领料单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, WmProductionPick wmProductionPick)
{
WmProductionPick wmProductionPick1=null;
List<WmProductionPickEntry> wmProductionPickEntrys=null;
List<WmProductionPickEntry> wmProductionPickEntryList= new ArrayList<>();
List<WmProductionPick> list = wmProductionPickService.selectWmProductionPickList(wmProductionPick);
ExcelUtil<WmProductionPick> util = new ExcelUtil<WmProductionPick>(WmProductionPick.class);
for(int i=0;i<list.size();i++)
{
long id=list.get(i).getId();
wmProductionPick= wmProductionPickService.selectWmProductionPickById(id);
wmProductionPickEntrys=wmProductionPick.getWmProductionPickEntryList();
wmProductionPickEntryList.addAll(wmProductionPickEntrys);
}
try {
String fileName = "student";
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
WriteSheet studentInfo = EasyExcel.writerSheet(0,"生产领料单数据")
.head(WmProductionPick.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.build();
excelWriter.write(list,studentInfo);
WriteSheet courseInfo = EasyExcel.writerSheet(1,"生产领料单子数据")
.head(WmProductionPickEntry.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.build();
excelWriter.write(wmProductionPickEntryList,courseInfo);
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
excelWriter.finish();
}catch (IOException e){
e.printStackTrace();
}
}
单文件导出可以使用ExcelUtil类中添加
public void exportEasyExcel(HttpServletResponse response, List<?> list, String sheetName)
{
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
try
{
EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(list);
}
catch (IOException e)
{
log.error("导出EasyExcel异常{}", e.getMessage());
}
}
然后contlloer里面修改为exportEasyExcel导出函数即可
8.ruoyi 框架导入数据库生成代码时出现两个id
查询后问题出现在
将where t.table_id = #{tableId} order by c.sort
改为where t.table_id = #{tableId} group by c.column_name,c.sort order by c.sort
去掉重复项