| 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<MatField> {  | 
|   | 
|     @SelectProvider(type = SqlProvider.class, method = "createViewSql")  | 
|     void createView(@Param("list") List<MatField> list);  | 
|   | 
|     @SelectProvider(type = SqlProvider.class, method = "createLocDetlView")  | 
|     void createLocDetlView();  | 
|   | 
|     @SelectProvider(type = SqlProvider.class, method = "createTaskDetlFieldSql")  | 
|     void createTaskDetlFieldView(@Param("list") List<MatField> list);  | 
|   | 
|     @SelectProvider(type = SqlProvider.class, method = "createViewTaskDetlSql")  | 
|     void createViewTaskDetlView();  | 
|   | 
|     @SelectProvider(type = SqlProvider.class, method = "createOrderDetlFieldSql")  | 
|     void createOrderDetlFieldView(@Param("list") List<MatField> list);  | 
|   | 
|     @SelectProvider(type = SqlProvider.class, method = "createViewOrderDetlSql")  | 
|     void createViewOrderDetlView();  | 
|   | 
|     class SqlProvider {  | 
|         public String createViewSql(Map<String, Object> params) {  | 
|             List<MatField> list = (List<MatField>) 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<String, Object> params) {  | 
|             List<MatField> list = (List<MatField>) 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<String, Object> params) {  | 
|             List<MatField> list = (List<MatField>) 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();  | 
|         }  | 
|     }  | 
|   | 
| }  |