2369059705@qq.com
2023-08-11 aadd7624614636e2145c335f8dc21e4140e68294
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.product.project.management.service;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import com.product.core.config.CoreConst;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.core.service.support.AbstractBaseService;
import com.product.project.management.config.Cmnconst;
import com.product.project.management.config.SystemCode;
import com.product.project.management.util.ProjectItemUtil;
import com.product.util.BaseUtil;
 
@Component
public class ProjectItemizeService extends AbstractBaseService{
 
    @Autowired
    BaseDao baseDao;
    
    
    /**
     *     项目分项-项目树(主子项目)
     * @param projectUUID    项目UUID
     * @return
     */
    public DataTableEntity getProjectTree(String projectUUID) {
        FieldSetEntity fseProjectInfo = baseDao.getFieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW, projectUUID, false);
        if (fseProjectInfo == null) {
            return null;
        }
        DataTableEntity dtProjectItemize = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=?", new Object[]{projectUUID}, new Object[]{CoreConst.UUID, Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE});
        if (!BaseUtil.dataTableIsEmpty(dtProjectItemize)) {
            DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItemize, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
            return newDtProjectItem;
        }
        return null;
    }
    
    /**
     *    项目分项-列表(展示选中分项的下一级列表)
     * @param projectUUID
     * @param itemizeCode
     * @param capge
     * @param pageSize
     * @return
     */
    public DataTableEntity listProjectItem(String projectUUID, String itemizeCode, Integer capge, Integer pageSize) {
        DataTableEntity dtItemizeBudget;
        if(BaseUtil.strIsNull(itemizeCode) || "000".equals(itemizeCode)) {
            dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=? AND itemize_parent_code IS NULL", new Object[] {projectUUID}, null, null, pageSize, capge);
        }else {
            dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=? AND itemize_parent_code=?", new Object[] {projectUUID,itemizeCode}, null, null, pageSize, capge);
        }
        
        //查询选中节点下所有项目分项
        if (!BaseUtil.dataTableIsEmpty(dtItemizeBudget)) {
            baseDao.loadPromptData(dtItemizeBudget);
        }
        return dtItemizeBudget;
    }
    
    /**
     *     保存项目分项
     * @param fse
     * @return
     */
    public FieldSetEntity saveProjectItem(FieldSetEntity fse) {
        //判断是否是新增
        if (BaseUtil.strIsNull(fse.getUUID())) {
            String projectUUID = fse.getString(Cmnconst.PROJECT_UUID);
            FieldSetEntity fseMaxProjectItem;
            String itemizeCode;
            String itemizeFullName = null;
            //判断是否有上级
            if (BaseUtil.strIsNull(fse.getString(Cmnconst.ITEMIZE_PARENT_CODE))) {
                fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "project_uuid = ? AND itemize_parent_code IS NULL", new Object[] {projectUUID}, false, null);
                if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) {
                    itemizeCode = "001";
                }else {
                    itemizeCode = ProjectItemUtil.autoAddOneCode(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE));
                }
                itemizeFullName = fse.getString(Cmnconst.ITEMIZE);
            }else {
                fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "project_uuid = ? AND itemize_parent_code = ?", new Object[] {projectUUID, fse.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false, null);
                if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) {
                    itemizeCode = ProjectItemUtil.autoCreateCode(fse.getString(Cmnconst.ITEMIZE_PARENT_CODE));
                }else {
                    itemizeCode = ProjectItemUtil.autoAddOneCode(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE));
                }
                FieldSetEntity itemizeParent = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid =? AND itemize_code=?", new Object[] {projectUUID, fse.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false);
                if (itemizeParent!=null) {
                    itemizeFullName = itemizeParent.getString(Cmnconst.ITEMIZE_FULL_NAME) + "/" + fse.getString(Cmnconst.ITEMIZE);
                }
            }
            fse.setValue(Cmnconst.ITEMIZE_CODE, itemizeCode);
            fse.setValue(Cmnconst.ITEMIZE_FULL_NAME, itemizeFullName);
        }
        baseDao.saveFieldSetEntity(fse);
        return fse;
    }
    
    /**
     *     删除项目分项
     * @param uuids
     * @return
     */
    public boolean deleteProjectItem(String uuids, String projectUUID) {
        //验证是否生成预算
        StringBuilder sbValidate = new StringBuilder(128);
        sbValidate.append(" SELECT * FROM product_project_budget ")
        .append(" WHERE project_itemize_uuid IN( ")
        .append(" select uuid from product_project_item ")
        .append(" WHERE project_uuid = ? AND itemize_code REGEXP ( ")
        .append(" SELECT CONCAT('^',GROUP_CONCAT(itemize_code SEPARATOR '|^')) FROM product_project_item ")
        .append(" WHERE  ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.UUID, uuids.split(","), true))
        .append(" ) ")
        .append(" ) ");
        DataTableEntity dtBudget = baseDao.listTable(sbValidate.toString(), new Object[] {projectUUID});
        if (!BaseUtil.dataTableIsEmpty(dtBudget)) {
            throw new BaseException(SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getText(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getValue());
        }
        //删除
        StringBuilder sbDelete = new StringBuilder(128);
        sbDelete.append(" DELETE from product_project_item ")
        .append(" WHERE uuid IN( ")
        .append(" SELECT * FROM( ")
        .append(" SELECT uuid FROM product_project_item ")
        .append(" WHERE project_uuid = ? AND itemize_code REGEXP ( ")
        .append(" SELECT CONCAT('^',GROUP_CONCAT(itemize_code SEPARATOR '|^')) FROM product_project_item ")
        .append(" WHERE  ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.UUID, uuids.split(","), true))
        .append(" ) ")
        .append(" )A ")
        .append(" ) ");
        
        return baseDao.executeUpdate(sbDelete.toString(), new Object[] {projectUUID});
    }
}