Helius
2021-06-16 5728be2af515b2200e782aa201ca5d4d67d9ea47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.ibeetl.admin.console.service;
 
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.poi.ss.util.CellReference;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.ibeetl.admin.console.dao.DictConsoleDao;
import com.ibeetl.admin.console.web.dto.DictExcelImportData;
import com.ibeetl.admin.core.entity.CoreDict;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.service.CoreBaseService;
import com.ibeetl.admin.core.util.ExcelError;
import com.ibeetl.admin.core.util.PlatformException;
 
/**
 * CoreDict Service
 */
 
@Service
@Transactional
public class DictConsoleService extends CoreBaseService<CoreDict> {
 
    @Autowired private DictConsoleDao dictDao;
 
    public PageQuery<CoreDict>queryByCondition(PageQuery query){
        PageQuery ret =  dictDao.queryByCondition(query);
        queryListAfter(ret.getList());
        return ret;
    }
 
    public void batchDelCoreDict(List<Long> ids){
        try {
            //TODO,找到数据字典所有子类,设置删除标记
            dictDao.batchDelCoreDictByIds(ids);
        } catch (Exception e) {
            throw new PlatformException("批量删除CoreDict失败", e);
        }
    }
    public List<CoreDict> queryExcel(PageQuery<CoreUser> query) {
        //同查询,不需要额外数据
        PageQuery ret =  dictDao.queryByCondition(query);
        queryListAfter(ret.getList());
        return ret.getList();
        
    }
    /**
     *  参考:dict_mapping.xml
     * @param list
     * @return
     */
    public void batchInsert(List<DictExcelImportData> list) {
       int dataStartRow = 2;
       final Map<Integer,DictExcelImportData> map = new HashMap<>();
       list.forEach((item)->map.put(item.getExcelId(), item));
       //逐个按照顺序导入
       for(DictExcelImportData item:list) {
           CoreDict dict = new  CoreDict();
           dict.setName(item.getName());
           dict.setRemark(item.getRemark());
           dict.setType(item.getType());
           dict.setTypeName(item.getTypeName());
           dict.setValue(item.getValue());
           
           //设置父字典
           if(item.getParentExcelId()!=0) {
               DictExcelImportData parentItem =  map.get(item.getParentExcelId());
               if(parentItem==null) {
                   //硬编码,TODO,用reader缺少校验,替换手写导入
                   int row = item.getExcelId()+dataStartRow;
                   throwImporError(row,5,"未找到父字典");
               }
               if(parentItem.getId()==null) {
                   int row = item.getExcelId()+dataStartRow;
                   throwImporError(row,5,"父字典未被导入,请先导入父字典");
               }
               dict.setParent(parentItem.getId());
           }
           dict.setCreateTime(new Date());
           //导入前先查找是否有此值
           CoreDict template = new CoreDict();
           template.setType(dict.getType());
           template.setValue(dict.getValue());
           CoreDict dbDict = dictDao.templateOne(template);
           if(dbDict!=null) {
               int row = item.getExcelId()+dataStartRow;
               throwImporError(row,0,"字典数据已经存在");
           }
           dictDao.insert(dict);
           
           item.setId(dict.getId());
           dataStartRow++;
       }
       
       
    }
    
    private void throwImporError(int row,int col,String msg) {
        ExcelError error = new ExcelError();
        CellReference cr = new CellReference(row,col,false,false);
        error.setCell(cr.formatAsString());
        error.setMsg(msg);
        throw new PlatformException("导入错误在:"+error.getCell()+","+msg);
    }
    
    
}