package com.zy.asrs.wms.asrs.mapper; import com.zy.asrs.wms.asrs.entity.MatField; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.SelectProvider; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; @Mapper @Repository public interface MatFieldMapper extends BaseMapper { @SelectProvider(type = SqlProvider.class, method = "createViewSql") void createView(@Param("list") List list); @SelectProvider(type = SqlProvider.class, method = "createLocDetlView") void createLocDetlView(); @SelectProvider(type = SqlProvider.class, method = "createTaskDetlFieldSql") void createTaskDetlFieldView(@Param("list") List list); @SelectProvider(type = SqlProvider.class, method = "createViewTaskDetlSql") void createViewTaskDetlView(); @SelectProvider(type = SqlProvider.class, method = "createOrderDetlFieldSql") void createOrderDetlFieldView(@Param("list") List list); @SelectProvider(type = SqlProvider.class, method = "createViewOrderDetlSql") void createViewOrderDetlView(); class SqlProvider { public String createViewSql(Map params) { List list = (List) params.get("list"); StringBuilder sql = new StringBuilder(); sql.append(" CREATE OR REPLACE VIEW view_man_loc_detl_field AS \n"); sql.append(" SELECT detl_id "); for (MatField matField : list) { sql.append(", MAX(CASE WHEN name = '").append(matField.getName()).append("' THEN value END) AS ").append(matField.getName()); } sql.append(" FROM man_loc_detl_field "); sql.append(" GROUP BY detl_id "); return sql.toString(); } public String createLocDetlView() { StringBuilder sql = new StringBuilder(); sql.append(" CREATE OR REPLACE VIEW view_man_loc_detl AS \n"); sql.append(" select * from man_loc_detl ld "); sql.append(" left join view_man_loc_detl_field ldf "); sql.append(" on ld.id = ldf.detl_id "); return sql.toString(); } public String createTaskDetlFieldSql(Map params) { List list = (List) params.get("list"); StringBuilder sql = new StringBuilder(); sql.append(" CREATE OR REPLACE VIEW view_man_task_detl_field AS \n"); sql.append(" SELECT detl_id as _detl_id "); for (MatField matField : list) { sql.append(", MAX(CASE WHEN name = '").append(matField.getName()).append("' THEN value END) AS ").append(matField.getName()); } sql.append(" FROM man_task_detl_field "); sql.append(" GROUP BY _detl_id "); return sql.toString(); } public String createViewTaskDetlSql() { StringBuilder sql = new StringBuilder(); sql.append(" CREATE OR REPLACE VIEW view_man_task_detl AS \n"); sql.append(" select * from man_task_detl td "); sql.append(" left join view_man_task_detl_field tdf "); sql.append(" on td.id = tdf._detl_id "); return sql.toString(); } public String createOrderDetlFieldSql(Map params) { List list = (List) params.get("list"); StringBuilder sql = new StringBuilder(); sql.append(" CREATE OR REPLACE VIEW view_man_order_detl_field AS \n"); sql.append(" SELECT detl_id as _detl_id "); for (MatField matField : list) { sql.append(", MAX(CASE WHEN name = '").append(matField.getName()).append("' THEN value END) AS ").append(matField.getName()); } sql.append(" FROM man_order_detl_field "); sql.append(" GROUP BY _detl_id "); return sql.toString(); } public String createViewOrderDetlSql() { StringBuilder sql = new StringBuilder(); sql.append(" CREATE OR REPLACE VIEW view_man_order_detl AS \n"); sql.append(" select * from man_order_detl od "); sql.append(" left join view_man_order_detl_field odf "); sql.append(" on od.id = odf._detl_id "); return sql.toString(); } } }