354798ggg
2023-07-21 e31fe4140580a730dcb2f2aecb6ac0d7a66df7c0
系统变更
已添加3个文件
已修改5个文件
519 ■■■■■ 文件已修改
product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectItemizeController.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/service/ProjectItemizeService.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/util/ProjectItemUtil.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java
@@ -17,10 +17,12 @@
    public static final String TOTAL_OUTBOUND_WEIGHT="total_outbound_weight";
    public static final String PROJECT_NAME="project_name";
    public static final String PROJECT_ITEMIZE="project_itemize";
    public static final String PROJECT_ITEMIZE_UUID="project_itemize_uuid";
    public static final String ITEMIZE="itemize";
    public static final String ITEMIZE_CODE="itemize_code";
    public static final String ITEMIZE_TYPE="itemize_type";
    public static final String ITEMIZE_PARENT_CODE="itemize_parent_code";
    public static final String ITEMIZE_FULL_NAME="itemize_full_name";
    public static final String BUDGET_CODE="budget_code";
product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java
@@ -10,8 +10,10 @@
    SYSTEM_ACQUIRE_PARAM_FAIL("获取参数失败", ModuleEnum.SYSTEM.getValue() + "996"),
    SYSTEM_CPAGES_NOT_NULL("分页参数不能为空", ModuleEnum.SYSTEM.getValue() + "995"),
    
    PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL("项目分项删除失败,已经生成预算",""),
    PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR("项目分项操作错误:",""),
    PROJECT_INFO_OPERATE_ERROR("项目信息操作失败:", ""),
    PROJECT_ITEMIZE_OPERATE_ERROR("项目分项操作错误:",""),
    PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET("项目分项删除失败,已经生成预算",""),
    PROJECT_ITEMIZE_DEL_FAIL("项目分项删除失败",""),
    PROJECT_BUDGET_IMPORT_FAIL("项目预算导入失败",""),
    ;
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java
@@ -48,8 +48,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -76,8 +76,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -104,8 +104,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -125,8 +125,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -154,8 +154,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -183,8 +183,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -216,8 +216,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -249,8 +249,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -276,8 +276,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
@@ -304,8 +304,8 @@
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectItemizeController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,148 @@
package com.product.project.management.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.product.core.config.CoreConst;
import com.product.core.controller.support.AbstractBaseController;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.module.sys.version.ApiVersion;
import com.product.project.management.config.Cmnconst;
import com.product.project.management.config.SystemCode;
import com.product.project.management.service.ProjectItemizeService;
import com.product.util.BaseUtil;
/**
 *     é¡¹ç›®åˆ†éƒ¨åˆ†é¡¹
 * @author 86151
 *
 */
@RequestMapping("/api/project-itemize")
@RestController
public class ProjectItemizeController extends AbstractBaseController{
    @Autowired
    ProjectItemizeService projectItemizeService;
    /**
     *     é¡¹ç›®åˆ†é¡¹-项目树(主子项目)
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/project-tree/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String getProjectTree(HttpServletRequest request) {
        try {
            // èŽ·å–å‚æ•°
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
            // åˆ¤æ–­uuid是否为空
            if (BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID))) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
            }
            return OK_List(projectItemizeService.getProjectTree(fse.getString(Cmnconst.PROJECT_UUID)));
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
    /**
     *     é¡¹ç›®åˆ†é¡¹-分项列表
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/list/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String listProjectItem(HttpServletRequest request) {
        try {
            // èŽ·å–å‚æ•°
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
            //判断uuid是否为空
            if (BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID))) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
            }
            //判断分页参数是否为空
            if (BaseUtil.strIsNull(fse.getString(CoreConst.CPAGE)) || BaseUtil.strIsNull(fse.getString(CoreConst.PAGESIZE))) {
                return this.error(SystemCode.SYSTEM_CPAGES_NOT_NULL.getValue(), SystemCode.SYSTEM_CPAGES_NOT_NULL.getText());
            }
            return OK_List(projectItemizeService.listProjectItem(fse.getString(Cmnconst.PROJECT_UUID),fse.getString(Cmnconst.ITEMIZE_CODE), fse.getInteger(CoreConst.CPAGE), fse.getInteger(CoreConst.PAGESIZE)));
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
    /**
     *     é¡¹ç›®åˆ†é¡¹-保存
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/save/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String saveProjectItem(HttpServletRequest request) {
        try {
            // èŽ·å–å‚æ•°
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
            return OK_List(projectItemizeService.saveProjectItem(fse));
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
    /**
     *     é¡¹ç›®åˆ†é¡¹-删除
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/delete/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String deleteProjectItem(HttpServletRequest request) {
        try {
            // èŽ·å–å‚æ•°
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
            //判断project_uuid是否为空
            if (BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID)) || BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID))) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
            }
            boolean succ = projectItemizeService.deleteProjectItem(fse.getUUID(), fse.getString(Cmnconst.PROJECT_UUID));
            if (succ) {
                return OK();
            }
            return this.error(SystemCode.PROJECT_ITEMIZE_DEL_FAIL.getValue(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL.getText());
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
        }
    }
}
product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java
@@ -1,7 +1,9 @@
package com.product.project.management.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -13,7 +15,10 @@
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;
import cn.hutool.core.lang.UUID;
@Service("projectBudget")
public class ProjectBudgetService extends AbstractBaseService{
@@ -26,6 +31,128 @@
     * @param dtParseData     è§£æžæ•°æ®
     * @param headerDataList excel标题数据
     */
    public DataTableEntity importBudget2(DataTableEntity dtParseData, List<List<String>> headerDataList) {
        //判断是否有解析EXCEL数据
        if (BaseUtil.dataTableIsEmpty(dtParseData)) {
            return null;
        }
        //临时存储集合
        Map<String, String> itemizeFullNameAndUUID = new HashMap<>();
        Map<String, String> itemizeFullNameAndCode = new HashMap<>();
        Map<String, String> itemizeFullNameAndMaxCode = new HashMap<>();
        DataTableEntity dtNewProjectItem = new DataTableEntity();
        //遍历excel转换数据
        for (int i = 0; i < dtParseData.getRows(); i++) {
            //获取excel行数据
            FieldSetEntity fseParseData = dtParseData.getFieldSetEntity(i);
            String uuid = autoCreateProjectItem(dtNewProjectItem, fseParseData, itemizeFullNameAndUUID, itemizeFullNameAndCode, itemizeFullNameAndMaxCode);
            fseParseData.setValue(Cmnconst.PROJECT_ITEMIZE_UUID, uuid);
        }
        if (!BaseUtil.dataTableIsEmpty(dtNewProjectItem)) {
            try {
                baseDao.add(dtNewProjectItem);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return dtParseData;
    }
    /**
     *     é€šè¿‡field1,field2,field3,field4,field5,field6数据自动生成项目分项数据
     *     å¦‚果项目分项已存在数据库或者新生成,将存入map集合中以便使用
     *     å¦‚果项目分项不存在于数据库则生成项目分项数据
     * @param dtNewProjectItem
     * @param fseParseData
     * @param itemizeFullNameAndUUID
     * @param itemizeFullNameAndCode
     * @param itemizeFullNameAndMaxCode
     * @return
     */
    public String autoCreateProjectItem(DataTableEntity dtNewProjectItem, FieldSetEntity fseParseData, Map<String, String> itemizeFullNameAndUUID, Map<String, String> itemizeFullNameAndCode, Map<String, String> itemizeFullNameAndMaxCode) {
        String itemizFullName = null;
        String finalUUID = null;
        //循环field1~field6字段,逐步生成对应的项目分项数据
        for (int i = 1; i < 7; i++) {
            //获取分项名称,判断是否为空
            String itemize = fseParseData.getString("field"+i);
            //判断项目分项名称是否为空(如为空:则该预算对应的项目分项生成完毕,预算关联的UUID为上一个field分项对应的UUID
            if (BaseUtil.strIsNull(itemize)) {
                finalUUID = itemizeFullNameAndUUID.get(itemizFullName);
                break;
            }
            //获取上级分项和当前分项全称(如当前分项没有上级:则全称等于名称;如有上级:则全称等于上级全称/名称)
            String itemizeParent = null;
            //获取分项全称
            if (BaseUtil.strIsNull(itemizFullName)) {
                itemizFullName = itemize;
            }else {
                itemizeParent = itemizFullName;
                itemizFullName = itemizFullName + "/" + itemize;
            }
            //判断项目分项是否存在于集合中
            if(!itemizeFullNameAndCode.containsKey(itemizFullName)) {
                //查询分项和上级分项是否存在于数据库中
                FieldSetEntity fseProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "itemize_full_name=?", new Object[] {itemizFullName}, false);
                if (fseProjectItem == null) {
                    String uuid = UUID.randomUUID().toString();
                    String code;
                    if (!BaseUtil.strIsNull(itemizeFullNameAndMaxCode.get(itemizeParent))) {
                        code = ProjectItemUtil.autoAddOneCode(itemizeFullNameAndMaxCode.get(itemizeParent));
                    }else {
                        FieldSetEntity fseMaxProjectItem;
                        if(BaseUtil.strIsNull(itemizeParent)) {
                            fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code IS NULL", new Object[] {}, false, null);
                        }else {
                            fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code = ?", new Object[] {itemizeFullNameAndCode.get(itemizeParent)}, false, null);
                        }
                        if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) {
                            code = ProjectItemUtil.autoCreateCode(itemizeFullNameAndCode.get(itemizeParent));
                        }else {
                            code = ProjectItemUtil.autoAddOneCode(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE));
                        }
                    }
                    FieldSetEntity fseNewProject = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_ITEM);
                    fseNewProject.setValue(Cmnconst.UUID, uuid);
                    fseNewProject.setValue("~type~", "add");
//                    fseNewProject.setValue(Cmnconst.PROJECT_UUID, );
                    fseNewProject.setValue(Cmnconst.ITEMIZE, itemize);
                    fseNewProject.setValue(Cmnconst.ITEMIZE_CODE, code);
                    fseNewProject.setValue(Cmnconst.ITEMIZE_PARENT_CODE, itemizeFullNameAndCode.get(itemizeParent));
                    fseNewProject.setValue(Cmnconst.ITEMIZE_FULL_NAME, itemizFullName);
                    dtNewProjectItem.addFieldSetEntity(fseNewProject);
                    itemizeFullNameAndUUID.put(itemizFullName, uuid);
                    itemizeFullNameAndCode.put(itemizFullName, code);
                    itemizeFullNameAndMaxCode.put(itemizeParent, code);
                }else {
                    String uuid = fseProjectItem.getUUID();
                    String code = fseProjectItem.getString(Cmnconst.ITEMIZE_CODE);
                    FieldSetEntity fseMaxProjectItem;
                    if (BaseUtil.strIsNull(fseProjectItem.getString(Cmnconst.ITEMIZE_PARENT_CODE))) {
                        fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code IS NULL", new Object[] {}, false, null);
                    }else {
                        fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code=?", new Object[] {fseProjectItem.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false, null);
                    }
                    itemizeFullNameAndUUID.put(itemizFullName, uuid);
                    itemizeFullNameAndCode.put(itemizFullName, code);
                    itemizeFullNameAndMaxCode.put(itemizeParent, fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE));
                }
            }
        }
        return finalUUID;
    }
    /**
     *     é¡¹ç›®é¢„算导入
     * @param dtParseData     è§£æžæ•°æ®
     * @param headerDataList excel标题数据
     */
    public DataTableEntity importBudget(DataTableEntity dtParseData, List<List<String>> headerDataList) {
        //判断是否有解析EXCEL数据
        if (BaseUtil.dataTableIsEmpty(dtParseData)) {
product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
@@ -228,7 +228,7 @@
    public void deleteItemizeValidate(String uuid) {
        DataTableEntity dtBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BUDGET, "budget_code=?", new Object[]{uuid});
        if (!BaseUtil.dataTableIsEmpty(dtBudget)) {
            throw new BaseException(SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getValue(), SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getText());
            throw new BaseException(SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getValue(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getText());
        }
    }
@@ -282,7 +282,6 @@
     * @param uuid
     * @return
     */
    public JSONArray getTreeProjectItem(String uuid) {
        DataTableEntity dtProjectItemize = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=?", new Object[]{uuid}, new Object[]{CoreConst.UUID, Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE});
        DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItemize, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
product-server-project-management/src/main/java/com/product/project/management/service/ProjectItemizeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,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});
    }
}
product-server-project-management/src/main/java/com/product/project/management/util/ProjectItemUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.product.project.management.util;
import com.product.util.BaseUtil;
public class ProjectItemUtil {
    /**
     *     æ ¹æ®åŒçº§æœ€å¤§ç¼–码,自动生成当前编码
     * @param oldCode    åŒçº§æœ€å¤§ç¼–码
     * @return
     */
    public static String autoAddOneCode(String oldCode) {
        if (BaseUtil.strIsNull(oldCode)) {
            oldCode = "000";
        }
        String lastCode = null;
        String prefixCode = null;
        if (oldCode.contains("-")) {
            lastCode = oldCode.substring(oldCode.lastIndexOf("-")+1, oldCode.length());
            prefixCode = oldCode.substring(0, oldCode.lastIndexOf("-")+1);
        }else {
            lastCode = oldCode;
        }
        int codeNum = Integer.parseInt(lastCode);
        codeNum++;
        String finalLastCode;
        if (codeNum<10) {
            finalLastCode="00"+codeNum;
        }else if(codeNum<100) {
            finalLastCode = "0"+codeNum;
        }else {
            finalLastCode = ""+codeNum;
        }
        return (BaseUtil.strIsNull(prefixCode)) ? finalLastCode:prefixCode+finalLastCode;
    }
    public static String autoCreateCode(String parentCode) {
        if (BaseUtil.strIsNull(parentCode)) {
            return "001";
        }else {
            return parentCode+"-001";
        }
    }
    public static void main(String[] args) {
        System.out.println(autoCreateCode(""));
    }
}