354798ggg
2023-06-28 3b0d2e394dddb504452bb492203bd1b2fff05fde
项目数据统计分析
已修改5个文件
265 ■■■■■ 文件已修改
product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-web/resources/LicenseKey.dat 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-web/src/main/resources/application-dev.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java
@@ -10,12 +10,20 @@
    public static final String PRODUCT_PROJECT_BUDGET="product_project_budget";    //预算
    
    //字段名
    public static final String MATERIAL_TYPE="material_type";
    public static final String MATERIAL_CODE="material_code";
    public static final String OUTBOUND_WEIGHT="outbound_weight";
    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 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 PROJECTTYPE="projectType";
    public static final String PROJECT_UUID="project_uuid";
    public static final String ITEMIZE_UUID="itemize_uuid";
}
product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java
@@ -10,11 +10,13 @@
import com.product.project.management.config.Cmnconst;
import com.product.project.management.config.SystemCode;
import com.product.project.management.service.ProjectInfoService;
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.util.BaseUtil;
import com.product.util.ResultInfo;
@RequestMapping("/api/qxlw-project")
@RestController("qxlw-project-controller")
@@ -24,7 +26,7 @@
    ProjectInfoService projectInfoService;
    
     /**
     * 根据uuid获取项目详情
     *    获取模板项目分项
     * @param request
     * @return
     */
@@ -51,7 +53,7 @@
    }
    
    /**
     * 根据uuid获取项目详情
     * 获取项目信息(项目分项多个树)
     * @param request
     * @return
     */
@@ -78,7 +80,82 @@
    }
    
    /**
     *     分项删除验证
     *     获取项目子表分项(单个树)
     * @param request
     * @return
     */
    @RequestMapping(value = "/get-projectAllItem/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String getProjectAllItem(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(projectInfoService.getProjectAllItem(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());
        }
    }
    /**
     *     获取项目信息(无分页参数)
     * @param request
     * @return
     */
    @RequestMapping(value = "/list-project/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String listProject(HttpServletRequest request) {
        try {
            return OK_List(projectInfoService.listProject());
        } 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());
        }
    }
    /**
     *     获取项目分析数据
     * @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());
        }
    }
    /**
     *     删除单个项目分项验证(根据预算验证是否删除)
     * @param request
     * @return
     */
@@ -104,4 +181,36 @@
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
        }
    }
    /**
     *     获取项目预算信息
     * @param request
     * @return
     */
    @RequestMapping(value = "/list-itemize-budget/{version}", method = RequestMethod.POST)
    @ApiVersion(1)
    public String listItemizeBudget(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(projectInfoService.listItemizeBudget(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_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
        }
    }
}
product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
@@ -1,10 +1,14 @@
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.config.CoreConst;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
@@ -13,6 +17,8 @@
import com.product.project.management.config.Cmnconst;
import com.product.project.management.config.SystemCode;
import com.product.util.BaseUtil;
import cn.hutool.json.JSONObject;
@Component("qxlw-project-service")
public class ProjectInfoService extends AbstractBaseService{
@@ -26,7 +32,7 @@
     * @return
     */
    public DataTableEntity getProjectTypeItem(String projectType) {
        DataTableEntity dtProjectItem = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BASE_PROJECT_ITEM, "itemize_type=?", new Object[] {projectType}, new Object[] {Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE});
        DataTableEntity dtProjectItem = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BASE_PROJECT_ITEM, "itemize_type=?", new Object[] {projectType}, new Object[] {Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_TYPE, Cmnconst.ITEMIZE_PARENT_CODE});
        if (!BaseUtil.dataTableIsEmpty(dtProjectItem)) {
            DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItem, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
            return newDtProjectItem;
@@ -35,7 +41,7 @@
    }
    
    /**
     *     通过项目主表获取项目分项(获取保存的子表分项)
     *     通过项目UUID获取项目分项(获取保存的子表分项--多个树)
     * @param uuid
     * @return
     */
@@ -48,6 +54,105 @@
    }
    
    /**
     *     通过项目UUID获取项目分项(获取保存的子表分项--单个树)
     * @param uuid
     * @return
     */
    public DataTableEntity getProjectAllItem(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});
        if (!BaseUtil.dataTableIsEmpty(dtProjectItemize)) {
            DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItemize,Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
            return newDtProjectItem;
        }
        return null;
    }
    /**
     *     获取所有项目信息
     * @return
     */
    public DataTableEntity listProject() {
        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 sb = new StringBuilder();
        sb.append("WITH outbound AS(")
        .append(" SELECT A.project_uuid,A.project_itemize,C.material_type,B.material_code,SUM(B.outbound_weight)outbound_weight ")
        .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_base_material C ON B.material_uuid = C.uuid ")
        .append(" WHERE project_uuid = ? ")
        .append(" GROUP BY A.project_uuid,A.project_itemize,C.material_type,B.material_code ")
        .append(" ) ")
        .append(" SELECT A.project_uuid,A.project_itemize,A.total_outbound_weight,B.material_type,B.material_code,B.outbound_weight ")
        .append(" FROM ( ")
        .append(" SELECT project_uuid,project_itemize,SUM(outbound_weight)total_outbound_weight ")
        .append(" FROM outbound ")
        .append(" GROUP BY project_uuid,project_itemize ")
        .append(" )A ")
        .append(" RIGHT JOIN outbound B ON A.project_uuid=B.project_uuid AND A.project_itemize=B.project_itemize ");
        DataTableEntity dtItemizeInfo = baseDao.listTable(sb.toString(), new Object[] {project_uuid});
        if(!BaseUtil.dataTableIsEmpty(dtItemizeInfo)) {
            Map<String, FieldSetEntity> convertData = new HashMap<>();
            String [] materialTypes = new String[3];
            //通过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(materialTypes[materialType])) {
                    materialTypes[materialType] = materialCode;
                }else {
                    materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)]+=","+materialCode;
                }
                //收集行转列数据
                String itemize = fseItemize.getString(Cmnconst.PROJECT_ITEMIZE);
                if(convertData.containsKey(itemize)) {
                    convertData.get(itemize).setValue(materialCode, outboundWeight);
                }else {
                    FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
                    fseConvertData.setValue(Cmnconst.PROJECT_ITEMIZE, itemize);
                    fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, fseItemize.getString(Cmnconst.TOTAL_OUTBOUND_WEIGHT));
                    fseConvertData.setValue(materialCode, outboundWeight);
                    convertData.put(itemize, fseConvertData);
                }
            }
            //将数据转为DataTableEntity返回
            if (!convertData.isEmpty()) {
                DataTableEntity finalConvertData = new DataTableEntity();
                convertData.forEach((k,v) -> {
                    finalConvertData.addFieldSetEntity(v);
                });
                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;
    }
    /**
     *     删除子项验证(已经生成预算的子项不能删除)
     * @param uuid
     */
@@ -57,4 +162,31 @@
            throw new BaseException(SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getValue(), SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getText());
        }
    }
    /**
     *     获取分项预算信息
     * @param projectUUID    项目UUID
     * @param itemizeCode    分项编码
     * @param capge            当前页
     * @param pageSize        页大小
     * @return
     */
    public DataTableEntity listItemizeBudget(String projectUUID, String itemizeCode, Integer capge, Integer pageSize) {
        String filter;
        List <String> params= new ArrayList<>();
        if (BaseUtil.strIsNull(itemizeCode)) {
            filter = "project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=?)";
            params.add(projectUUID);
        }else {
            filter = "project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=? AND itemize_code like ?)";
            params.add(projectUUID);
            params.add(itemizeCode+"%");
        }
        DataTableEntity dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BUDGET, filter, params.toArray(), null, null, pageSize, capge);
        if (!BaseUtil.dataTableIsEmpty(dtItemizeBudget)) {
            baseDao.loadPromptData(dtItemizeBudget);
        }
        return dtItemizeBudget;
    }
}
product-server-web/resources/LicenseKey.dat
@@ -1 +1 @@
85386B13FF67416BC058E5D2010FA3D7978FC3762317AAACE87A3D97178D3DCB3AB624E3498F019D11080BD99029E5A0256ED4C2C626E966A6BE9238FD4FAA07DC434535665C12CF3529F692D334451DA99BE57CB717F2B5B0E4E9494CF22363E6DE83B3D95D4CAD15F3BF58CA619F0F25CA79FAB051AA4FF819556EDB396C848136412DD3CDCDB911BFEDDD6D220D420CA7B2A538C979BA4B5583DC5589C95F31C503AFF56A7C9C2C18C1A0DB15ED02F89371704A83F3B45C2522072C5E4847A4831E8720B010ED2A07F81996F40DD95BF29DC70CA2B5F0F065379AAD1C1336FDAAB2BE0442A4E5A09C4C418CD34E3C44B674324B124A074C811F927391D0BB89C57F6F2258A9F6FEC96E4B4B4F99D5B5C801C5BA38D21306D381D97DDF37E6D87F15D745B3582EB2A3A1928F1EB451965AD3C434C6F95AE617430E172493FDB5FCB18352BB7CA011D29D82EF7C6F10F08E7CDCFD5E5212B3B8D18A225A7BB139F2BC4264F23751B87B4A981202196BA2676956DE2E54F292DA404BF4EC9396
0886D8419E36B4B1E123DFA6CD802D8422F48DF760C2A7669CA7B5251BF2FD2399B7B7732987428517509D61E571C7FBE4E2863C9D293E4687EF963B4EB9DAF4CA3ECF673EE824FA2288C196A487FBF1952ECD69AEC354D06DE599F4CF622C6FD660D86DDFA50A196A1E6B5FB8575D3F8F5FC717702F117FAF5E531B01677B035314C1A6E5105BBF154F3A875D6287AE41F34E60CFB398A0B9ADC3AA9980D17820BB011C9E1CA27060BED4400C79B0A77D1C30858815BE6224B3D2D8D320E5FF32A675BA7555015EE99FB9696BAF95C76E53919F7755D79E11E768AAA248227B58106E42CE1452A7A88FB919F818EABE97650A1E7397DE6BE820746F321422E6E31087A233AE09FA173B28A7672150C2246515B0B250C8552F913A1D04A9DC636B7E64775514359949689118E71B3B39ADA7B8522ED1B2F2F8B391388D772BF8D8E94F5BB611C1999435ABB8CF3DEBCAC5E38E9D8055F6EC159C4198CF20F1EE0F8A49BF5D3846AC54C412230F87EB0E715982038781C5E2DB2C066AEF902C93A2296A4D56B68C8A1D3C745AB2E49A604190136C18CCBF01C873D687888D6EB1CFA6244628D477060466AA314A8466894D1BC0B241B72FC059173EB93080BCE2A7F93E4BA48637BECD0C9CCC65EE537F944FE05A222021E2EAAB6171FC1111CB55EB2DA6ED2D889B2D0B2897FC3C61B6274BCD8B635EE9F56A4FD736F0244D14
product-server-web/src/main/resources/application-dev.properties
@@ -74,7 +74,7 @@
data.source.type=mysql
data.source.driver=com.mysql.jdbc.Driver
#################local###############################
data.source.url=jdbc:mysql://192.168.0.200:3308/product_db_v3.0.0?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai
data.source.url=jdbc:mysql://192.168.0.200:3308/product_db_qxlw?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useNewIO=true&useSSL=false&serverTimezone=Asia/Shanghai
data.source.user=root
data.source.password=root123
##################local###############################