87e8b958288e719fd15ad4295b50a475a2fbec3f..c383af8d9624b7d1f8e2111680ea1642593ad805
2023-07-24 354798ggg
项目调整
c383af 对比 | 目录
2023-07-21 354798ggg
Merge branch 'master' of http://nonxin.cn:8090/r/project/qxlw
43025d 对比 | 目录
2023-07-21 354798ggg
系统变更
e31fe4 对比 | 目录
已添加6个文件
已修改5个文件
1005 ■■■■ 文件已修改
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/ProjectBudgetController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java 64 ●●●● 补丁 | 查看 | 原始文档 | 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/controller/ProjectStatisticAnalysisController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | 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 145 ●●●●● 补丁 | 查看 | 原始文档 | 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/service/ProjectStatisticAnalysisService.java 262 ●●●●● 补丁 | 查看 | 原始文档 | 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/ProjectBudgetController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
package com.product.project.management.controller;
public class ProjectBudgetController {
}
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,39 +125,11 @@
            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());
        }
    }
    /**
     * èŽ·å–é¡¹ç›®åˆ†æžæ•°æ®
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/statist-analysis-report/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String statistAnalysis(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 ResultInfo.success(projectInfoService.statistAnalysis(fse.getString(Cmnconst.PROJECT_UUID)));
//            return OK_List(projectInfoService.statistAnalysis(fse.getString(Cmnconst.PROJECT_UUID)));
        } catch (BaseException e) {
            e.printStackTrace();
            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());
        }
    }
    /**
     * åˆ é™¤å•个项目分项验证(根据预算验证是否删除)
@@ -183,8 +155,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 +188,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 +221,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 +248,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 +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());
        }
    }
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/controller/ProjectStatisticAnalysisController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
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.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.ProjectStatisticAnalysisService;
import com.product.util.BaseUtil;
import com.product.util.ResultInfo;
@RequestMapping("/api/project-statistic")
@RestController
public class ProjectStatisticAnalysisController extends AbstractBaseController{
    @Autowired
    ProjectStatisticAnalysisService projectStatisticAnalysisService;
    /**
     * èŽ·å–é¡¹ç›®åˆ†æžæ•°æ®
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/statist-analysis-report/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String statistAnalysis(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 ResultInfo.success(projectStatisticAnalysisService.statistAnalysis(fse.getString(Cmnconst.PROJECT_UUID)));
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e);
        } catch (Exception e) {
            e.printStackTrace();
            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/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,13 +15,138 @@
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{
    
    @Autowired
    BaseDao baseDao;
    /**
     *     é¡¹ç›®é¢„算导入
     * @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;
    }
    /**
     *     é¡¹ç›®é¢„算导入
product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
@@ -80,145 +80,7 @@
        return baseDao.listTable(Cmnconst.PRODUCT_PROJECT_QXLW, null, null, new Object[]{CoreConst.UUID, Cmnconst.PROJECT_NAME});
    }
    /**
     * é¡¹ç›®æ•°æ®åˆ†æž
     *
     * @param project_uuid
     * @return
     */
    public JSONObject statistAnalysis(String project_uuid) {
        JSONObject returnJson = new JSONObject();
        //数据库出库信息汇总
        StringBuilder outboundInfo = new StringBuilder(512);
        outboundInfo.append(" WITH outbound AS( ")
        .append(" SELECT project_uuid,itemize,material_type,material_code,SUM(outbound_weight)outbound_weight FROM ( ")
        .append(" SELECT ")
        .append(" A.project_uuid, ")
        .append(" B.material_type,B.material_code,B.outbound_weight, ")
        .append(" (SELECT itemize FROM product_project_item WHERE project_uuid = A.project_uuid AND itemize_code = substring(C.itemize_code,1,7)) itemize ")
        .append(" FROM product_project_outbound A ")
        .append(" LEFT JOIN product_project_outbound_sub B ON A.uuid=B.outbound_uuid ")
        .append(" LEFT JOIN product_project_item C ON C.uuid = A.project_itemize ")
        .append(" WHERE A.flow_flag=2 AND A.project_uuid=? ")
        .append(" )A GROUP BY project_uuid,itemize,material_type,material_code ")
        .append(" )");
        //出库信息操作(架立筋和声测管不展示型号汇总求和行转列,普通钢筋和网片展示型号,根据项目分项关联汇总)
        StringBuilder operateInfo = new StringBuilder(1024);
        operateInfo.append(" ,getItemizeSum AS( ")
        .append(" SELECT itemize,SUM(outbound_weight)total_outbound_weight FROM outbound WHERE material_type IN (0,1) GROUP BY itemize ")
        .append(" ),allitemize AS( ")
        .append(" SELECT itemize FROM outbound GROUP BY itemize ")
        .append(" ),intermediateData1 AS( ")
        .append(" SELECT A.itemize,SUM(IF(`material_type`='1',outbound_weight,0)) as 'JLJ',SUM(IF(`material_type`='2',outbound_weight,0)) as 'SCG' ")
        .append(" FROM ( SELECT itemize FROM outbound GROUP BY itemize )A ")
        .append(" LEFT JOIN ( ")
        .append(" SELECT project_uuid,itemize,material_type,CASE WHEN material_type=1 THEN '架立筋' ELSE '声测管' END AS material_code,SUM(outbound_weight)outbound_weight ")
        .append(" FROM outbound ")
        .append(" WHERE material_type IN (1,2) ")
        .append(" GROUP BY project_uuid,itemize,material_type ")
        .append(" ) B ON A.itemize = B.itemize ")
        .append(" GROUP BY A.itemize ")
        .append(" ),intermediateData2 AS( ")
        .append(" SELECT project_uuid,itemize,material_type,material_code,outbound_weight FROM outbound WHERE material_type IN (0,3) ")
        .append(" ),intermediateData3 AS( ")
        .append(" SELECT A.itemize,A.total_outbound_weight,A.jlj,A.scg,B.material_type,material_code,outbound_weight FROM( ")
        .append(" SELECT A.itemize,C.total_outbound_weight,B.jlj,B.scg ")
        .append(" FROM allitemize A ")
        .append(" LEFT JOIN intermediateData1 B ON A.itemize = B.itemize ")
        .append(" LEFT JOIN getItemizeSum C ON A.itemize = C.itemize ")
        .append(" )A ")
        .append(" LEFT JOIN intermediateData2 B ON A.itemize = B.itemize ")
        .append(" ) ")
        .append(" select * from intermediateData3 ");
        StringBuilder totalSum = new StringBuilder("");
        totalSum.append(" SELECT material_code,SUM(outbound_weight)outbound_weight FROM outbound WHERE material_type IN (0,3) GROUP BY material_code ")
        .append(" UNION ALL ")
        .append(" SELECT CASE WHEN material_type=1 THEN 'JLJ' WHEN material_type=2 THEN 'SCG' END,SUM(outbound_weight) FROM outbound WHERE material_type IN (1,2) GROUP BY material_type ")
        .append(" UNION ALL ")
        .append(" SELECT '合计',SUM(outbound_weight) FROM outbound WHERE material_type IN (0,1,3) GROUP BY project_uuid ");
        //获取SQL解析的基本数据,利用JAVA将项目分项对应的不同材料行转列
        DataTableEntity dtItemizeInfo = baseDao.listTable(outboundInfo.toString() + operateInfo.toString(), new Object[]{project_uuid});
        if (!BaseUtil.dataTableIsEmpty(dtItemizeInfo)) {
            Map<String, FieldSetEntity> convertData = new HashMap<>();
            String[] materialTypes = new String[4];
            //通过Java循环将"材料"和"出库量"数据行转列
            for (int i = 0; i < dtItemizeInfo.getRows(); i++) {
                FieldSetEntity fseItemize = dtItemizeInfo.getFieldSetEntity(i);
                //获取材料编码,材料类型,出库量
                String materialCode = fseItemize.getString(Cmnconst.MATERIAL_CODE);
                String outboundWeight = fseItemize.getString(Cmnconst.OUTBOUND_WEIGHT);
                Integer materialType = fseItemize.getInteger(Cmnconst.MATERIAL_TYPE);
                //收集获取所有表头列(材料编码),架立筋和声测管没有表头
                if (!BaseUtil.strIsNull(materialCode)) {
                    if (BaseUtil.strIsNull(materialTypes[materialType])) {
                        materialTypes[materialType] = materialCode;
                    } else {
                        if(materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)].indexOf(materialCode)<0) {
                            materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)] += "," + materialCode;
                        }
                    }
                }
                //收集行转列数据
                String itemize = fseItemize.getString(Cmnconst.ITEMIZE);
                if (convertData.containsKey(itemize)) {
                    convertData.get(itemize).setValue(materialCode, outboundWeight);
                } else {
                    FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
                    fseConvertData.setValue(Cmnconst.ITEMIZE, itemize);
                    fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, fseItemize.getString(Cmnconst.TOTAL_OUTBOUND_WEIGHT));
                    fseConvertData.setValue(materialCode, outboundWeight);
                    fseConvertData.setValue("jlj", fseItemize.getString("jlj"));
                    fseConvertData.setValue("scg", fseItemize.getString("scg"));
                    convertData.put(itemize, fseConvertData);
                }
            }
            //计算汇总
            DataTableEntity dtTotalInfo = baseDao.listTable(outboundInfo.toString() + totalSum.toString(), new Object[]{project_uuid});
            FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
            if (!BaseUtil.dataTableIsEmpty(dtTotalInfo)) {
                for (int i = 0; i < dtTotalInfo.getRows(); i++) {
                    FieldSetEntity fseTotalInfo = dtTotalInfo.getFieldSetEntity(i);
                    String materialCode = fseTotalInfo.getString(Cmnconst.MATERIAL_CODE);
                    String outboundWeight = fseTotalInfo.getString(Cmnconst.OUTBOUND_WEIGHT);
                    if (!BaseUtil.strIsNull(materialCode) && !BaseUtil.strIsNull(outboundWeight)) {
                        if ("合计".equals(materialCode)) {
                            fseConvertData.setValue(Cmnconst.ITEMIZE, "合计");
                            fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, outboundWeight);
                        }else {
                            fseConvertData.setValue(materialCode, outboundWeight);
                        }
                    }
                }
            }
            //将数据转为DataTableEntity返回
            if (!convertData.isEmpty()) {
                DataTableEntity finalConvertData = new DataTableEntity();
                convertData.forEach((k, v) -> {
                    finalConvertData.addFieldSetEntity(v);
                });
                finalConvertData.addFieldSetEntity(fseConvertData);
                returnJson.set("data", BaseUtil.dataTableEntityToJson(finalConvertData));
            }
            //将表头数据返回
            for (int i = 0; i < materialTypes.length; i++) {
                if (!BaseUtil.strIsNull(materialTypes[i])) {
                    returnJson.set("type" + i, materialTypes[i]);
                }
            }
        }
        return returnJson;
    }
    /**
     * åˆ é™¤å­é¡¹éªŒè¯ï¼ˆå·²ç»ç”Ÿæˆé¢„算的子项不能删除)
@@ -228,7 +90,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());
        }
    }
@@ -271,6 +133,7 @@
    public DataTableEntity listMaterialV(String uuid, Integer capge, Integer pageSize) {
        return baseDao.listTable("product_project_base_material_v","project_itemize_uuid=?",new String[]{uuid},null,null,pageSize, capge);
    }
    /**
     * æ›´å…·ä»“库和材料获取库存
     * @return
@@ -278,12 +141,12 @@
    public FieldSetEntity findInventoryV(String warehouse_uuid, String material_uuid) {
        return baseDao.getFieldSetByFilter("product_project_inventory_v","warehouse_uuid=? and uuid=?",new String[]{warehouse_uuid,material_uuid},false);
    }
    /**
     * æ ¹æ®é¡¹ç›®uuid获取项目分项树结构
     * @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/service/ProjectStatisticAnalysisService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,262 @@
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.Component;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.service.support.AbstractBaseService;
import com.product.project.management.config.Cmnconst;
import com.product.util.BaseUtil;
import cn.hutool.json.JSONObject;
@Component
public class ProjectStatisticAnalysisService extends AbstractBaseService{
    @Autowired
    BaseDao baseDao;
    /**
     * é¡¹ç›®æ•°æ®åˆ†æž
     *
     * @param project_uuid
     * @return
     */
    public JSONObject statistAnalysis(String project_uuid) {
        JSONObject returnJson = new JSONObject();
        List<List<String>> listMaterialType = getReportMaterialType();
        //数据库出库信息汇总
        StringBuilder outboundInfo = new StringBuilder(512);
        outboundInfo.append(" WITH outbound AS( ")
        .append(" SELECT project_uuid,itemize,material_type,material_code,SUM(outbound_weight)outbound_weight FROM ( ")
        .append(" SELECT ")
        .append(" A.project_uuid,B.material_type,B.material_code,B.outbound_weight, ")
        .append(" (SELECT itemize FROM product_project_item WHERE project_uuid = A.project_uuid AND itemize_code = substring(C.itemize_code,1,11)) itemize ")
        .append(" FROM product_project_outbound A ")
        .append(" LEFT JOIN product_project_outbound_sub B ON A.uuid=B.outbound_uuid ")
        .append(" LEFT JOIN product_project_item C ON C.uuid = A.project_itemize ")
        .append(" WHERE A.flow_flag=2 AND A.project_uuid=? ")
        .append(" )A GROUP BY project_uuid,itemize,material_type,material_code ")
        .append(" )");
        //出库信息操作(getItemizeSum[钢筋和架立筋左侧汇总];allitemize[所有三级分项];intermediateData1[钢筋架立筋按分项汇总];intermediateData2[钢筋网片按分项和材料汇总];intermediateData3[报表成型])
        StringBuilder operateInfo = new StringBuilder(1024);
        operateInfo.append(" ,getItemizeSum AS( ")
        .append(" SELECT itemize,ROUND(SUM(outbound_weight)/1000,1) total_outbound_weight FROM outbound WHERE ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(0).toArray(), true))
        .append(" GROUP BY itemize ")
        .append(" )")
        .append(",allitemize AS( ")
        .append(" SELECT itemize FROM outbound GROUP BY itemize ")
        .append(" )")
        .append(",intermediateData1 AS( ")
        .append(" SELECT A.itemize ");
        for (int i = 0; i < listMaterialType.get(2).size(); i++) {
            operateInfo.append(",SUM(IF(material_type=")
            .append(listMaterialType.get(2).get(i))
            .append(",outbound_weight,0)) as ")
            .append(listMaterialType.get(3).get(i));
        }
        operateInfo.append(" FROM ( SELECT itemize FROM outbound GROUP BY itemize )A ")
        .append(" LEFT JOIN ( ")
        .append(" SELECT project_uuid,itemize,material_type,SUM(outbound_weight)outbound_weight,CASE ");
        for (int i = 0; i < listMaterialType.get(2).size(); i++) {
            operateInfo.append(" WHEN material_type=")
            .append(listMaterialType.get(2).get(i))
            .append(" THEN ")
            .append("'").append(listMaterialType.get(3).get(i)).append("'");
        }
        operateInfo.append(" END AS material_code ")
        .append(" FROM outbound ")
        .append(" WHERE ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(1).toArray(), false))
        .append(" GROUP BY project_uuid,itemize,material_type ")
        .append(" ) B ON A.itemize = B.itemize ")
        .append(" GROUP BY A.itemize ")
        .append(" )")
        .append(",intermediateData2 AS( ")
        .append(" SELECT project_uuid,itemize,material_type,material_code,outbound_weight FROM outbound WHERE ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(1).toArray(), true))
        .append(" )")
        .append(",intermediateData3 AS( ")
        .append(" SELECT A.itemize,A.total_outbound_weight,B.material_type,material_code,outbound_weight");
        for (int i = 0; i < listMaterialType.get(3).size(); i++) {
            operateInfo.append(",A.").append(listMaterialType.get(3).get(i));
        }
        operateInfo.append(" FROM( ")
        .append(" SELECT A.itemize,C.total_outbound_weight ");
        for (int i = 0; i < listMaterialType.get(3).size(); i++) {
            operateInfo.append(",B.").append(listMaterialType.get(3).get(i));
        }
        operateInfo.append(" FROM allitemize A ")
        .append(" LEFT JOIN intermediateData1 B ON A.itemize = B.itemize ")
        .append(" LEFT JOIN getItemizeSum C ON A.itemize = C.itemize ")
        .append(" )A ")
        .append(" LEFT JOIN intermediateData2 B ON A.itemize = B.itemize ")
        .append(" ) ")
        .append(" select * from intermediateData3 ");
        StringBuilder totalSum = new StringBuilder("");
        totalSum.append(" SELECT material_code,ROUND(SUM(outbound_weight),1) outbound_weight FROM outbound WHERE ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(1).toArray(), true))
        .append(" GROUP BY material_code ")
        .append(" UNION ALL ")
        .append(" SELECT CASE ");
        for (int i = 0; i < listMaterialType.get(2).size(); i++) {
            totalSum.append(" WHEN material_type=")
            .append(listMaterialType.get(2).get(i))
            .append(" THEN ")
            .append("'").append(listMaterialType.get(3).get(i)).append("'");
        }
        totalSum.append(" END, ROUND(SUM(outbound_weight),1)")
        .append(" FROM outbound WHERE ")
        .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(2).toArray(), true))
        .append(" GROUP BY material_type ")
        .append(" UNION ALL ")
        .append(" SELECT '合计',ROUND(SUM(outbound_weight)/1000,1) FROM outbound WHERE material_type IN (0,1,3) GROUP BY project_uuid ");
        //获取SQL解析的基本数据,利用JAVA将项目分项对应的不同材料行转列
        DataTableEntity dtItemizeInfo = baseDao.listTable(outboundInfo.toString() + operateInfo.toString(), new Object[]{project_uuid});
        if (!BaseUtil.dataTableIsEmpty(dtItemizeInfo)) {
            Map<String, FieldSetEntity> convertData = new HashMap<>();
            String[] materialTypes = new String[4];
            //通过Java循环将"材料"和"出库量"数据行转列
            for (int i = 0; i < dtItemizeInfo.getRows(); i++) {
                FieldSetEntity fseItemize = dtItemizeInfo.getFieldSetEntity(i);
                //获取材料编码,材料类型,出库量
                String materialCode = fseItemize.getString(Cmnconst.MATERIAL_CODE);
                String outboundWeight = fseItemize.getString(Cmnconst.OUTBOUND_WEIGHT);
                Integer materialType = fseItemize.getInteger(Cmnconst.MATERIAL_TYPE);
                //收集获取所有表头列(材料编码),架立筋和声测管没有表头
                if (!BaseUtil.strIsNull(materialCode)) {
                    if (BaseUtil.strIsNull(materialTypes[materialType])) {
                        materialTypes[materialType] = materialCode;
                    } else {
                        if(materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)].indexOf(materialCode)<0) {
                            materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)] += "," + materialCode;
                        }
                    }
                }
                //收集行转列数据
                String itemize = fseItemize.getString(Cmnconst.ITEMIZE);
                if (convertData.containsKey(itemize)) {
                    convertData.get(itemize).setValue(materialCode, outboundWeight);
                } else {
                    FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
                    fseConvertData.setValue(Cmnconst.ITEMIZE, itemize);
                    fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, fseItemize.getString(Cmnconst.TOTAL_OUTBOUND_WEIGHT));
                    fseConvertData.setValue(materialCode, outboundWeight);
                    for (int j = 0; j < listMaterialType.get(3).size(); j++) {
                        fseConvertData.setValue(listMaterialType.get(3).get(j), fseItemize.getString(listMaterialType.get(3).get(j)));
                    }
                    fseConvertData.setValue("jlj", fseItemize.getString("jlj"));
                    fseConvertData.setValue("scg", fseItemize.getString("scg"));
                    convertData.put(itemize, fseConvertData);
                }
            }
            //计算汇总
            DataTableEntity dtTotalInfo = baseDao.listTable(outboundInfo.toString() + totalSum.toString(), new Object[]{project_uuid});
            FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
            if (!BaseUtil.dataTableIsEmpty(dtTotalInfo)) {
                for (int i = 0; i < dtTotalInfo.getRows(); i++) {
                    FieldSetEntity fseTotalInfo = dtTotalInfo.getFieldSetEntity(i);
                    String materialCode = fseTotalInfo.getString(Cmnconst.MATERIAL_CODE);
                    String outboundWeight = fseTotalInfo.getString(Cmnconst.OUTBOUND_WEIGHT);
                    if (!BaseUtil.strIsNull(materialCode) && !BaseUtil.strIsNull(outboundWeight)) {
                        if ("合计".equals(materialCode)) {
                            fseConvertData.setValue(Cmnconst.ITEMIZE, "合计");
                            fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, outboundWeight);
                        }else {
                            fseConvertData.setValue(materialCode, outboundWeight);
                        }
                    }
                }
            }
            //将数据转为DataTableEntity返回
            if (!convertData.isEmpty()) {
                DataTableEntity finalConvertData = new DataTableEntity();
                convertData.forEach((k, v) -> {
                    finalConvertData.addFieldSetEntity(v);
                });
                finalConvertData.addFieldSetEntity(fseConvertData);
                returnJson.set("data", BaseUtil.dataTableEntityToJson(finalConvertData));
            }
            //将表头数据返回
            for (int i = 0; i < materialTypes.length; i++) {
                if (!BaseUtil.strIsNull(materialTypes[i])) {
                    returnJson.set("type" + i, materialTypes[i]);
                }
            }
        }
        return returnJson;
    }
    /**
     *     è¿”回材料类型信息
     *     listSummary éœ€è¦æ±‡æ€»çš„ææ–™
     *     listShowMaterialCode éœ€è¦å±•示材料编码的材料
     *     listNotShowMaterialCode ä¸éœ€è¦å±•示材料编码的材料
     *     listNotShowMaterialCodeName ä¸éœ€è¦å±•示材料编码的材料类型名称
     * @return
     */
    public List<List<String>> getReportMaterialType() {
        DataTableEntity dtMaterialType = baseDao.listTable("product_sys_dict", "dict_name = ?", new Object[] {Cmnconst.MATERIAL_TYPE}, new Object[] {"dict_value","dict_label"});
        if (!BaseUtil.dataTableIsEmpty(dtMaterialType)) {
            List<List<String>> returnList = new ArrayList<>();
            List<String> listSummary = new ArrayList<>();
            List<String> listShowMaterialCode = new ArrayList<>();
            List<String> listNotShowMaterialCode = new ArrayList<>();
            List<String> listNotShowMaterialCodeName = new ArrayList<>();
            for (int i = 0; i < dtMaterialType.getRows(); i++) {
                String dictValue = dtMaterialType.getFieldSetEntity(i).getString("dict_value");
                String dictLabel = dtMaterialType.getFieldSetEntity(i).getString("dict_label");
                if ("0".equals(dictValue)) {
                    listSummary.add(dictValue);
                    listShowMaterialCode.add(dictValue);
                }else if ("1".equals(dictValue)) {
                    listSummary.add(dictValue);
                    listNotShowMaterialCode.add(dictValue);
                    listNotShowMaterialCodeName.add(dictLabel);
                }else if ("3".equals(dictValue)) {
                    listShowMaterialCode.add(dictValue);
                }else {
                    listNotShowMaterialCode.add(dictValue);
                    listNotShowMaterialCodeName.add(dictLabel);
                }
            }
            returnList.add(listSummary);
            returnList.add(listShowMaterialCode);
            returnList.add(listNotShowMaterialCode);
            returnList.add(listNotShowMaterialCodeName);
            return returnList;
        }
        return null;
    }
}
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(""));
    }
}