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}); } }