product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java
@@ -8,7 +8,8 @@ public static final String PRODUCT_PROJECT_QXLW="product_project_qxlw"; //项ç®ä¿¡æ¯ public static final String PRODUCT_PROJECT_ITEM="product_project_item"; //项ç®å项 public static final String PRODUCT_PROJECT_BUDGET="product_project_budget"; //é¢ç® public static final String PRODUCT_PROJECT_BASE_MATERIAL="product_project_base_material"; public static final String PRODUCT_PROJECT_BASE_MATERIAL="product_project_base_material"; //åºç¡ææ public static final String PRODUCT_PROJECT_OUTBOUND="product_project_outbound"; //åºåºä¿¡æ¯ä¸»è¡¨ //åæ®µå public static final String MATERIAL_TYPE="material_type"; product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java
@@ -10,11 +10,15 @@ SYSTEM_ACQUIRE_PARAM_FAIL("è·ååæ°å¤±è´¥", ModuleEnum.SYSTEM.getValue() + "996"), SYSTEM_CPAGES_NOT_NULL("å页忰ä¸è½ä¸ºç©º", ModuleEnum.SYSTEM.getValue() + "995"), PROJECT_INFO_OPERATE_ERROR("项ç®ä¿¡æ¯æä½å¤±è´¥:", ""), PROJECT_ITEMIZE_OPERATE_ERROR("项ç®å项æä½é误ï¼",""), PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET("项ç®å项å é¤å¤±è´¥ï¼å·²ç»çæé¢ç®",""), PROJECT_ITEMIZE_DEL_FAIL("项ç®å项å é¤å¤±è´¥",""), PROJECT_BUDGET_IMPORT_FAIL("项ç®é¢ç®å¯¼å ¥å¤±è´¥",""), PROJECT_INFO_OPERATE_ERROR("项ç®ä¿¡æ¯æä½å¤±è´¥:", ModuleEnum.QXLW_PROJECT.getValue() + "001"), PROJECT_ITEMIZE_OPERATE_ERROR("项ç®å项æä½é误ï¼", ModuleEnum.QXLW_PROJECT.getValue() + "002"), PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET("项ç®å项å é¤å¤±è´¥ï¼å·²ç»çæé¢ç®", ModuleEnum.QXLW_PROJECT.getValue() + "003"), PROJECT_ITEMIZE_DEL_FAIL("项ç®å项å é¤å¤±è´¥", ModuleEnum.QXLW_PROJECT.getValue() + "004"), PROJECT_BUDGET_OPERATE_ERROR("项ç®é¢ç®æä½å¤±è´¥:", ModuleEnum.QXLW_PROJECT.getValue() + "005"), PROJECT_BUDGET_IMPORT_FAIL("项ç®é¢ç®å¯¼å ¥å¤±è´¥", ModuleEnum.QXLW_PROJECT.getValue() + "006"), PROJECT_BUDGET_CLEAR_FAIL("项ç®é¢ç®æ¸ ç失败", ModuleEnum.QXLW_PROJECT.getValue() + "007"), PROJeCT_BUDGET_CLEAR_FAIL_HAS_OUTBOUND("é¢ç®æ¸ ç失败ï¼å·²ç»åå¨åºåºæ°æ®ï¼", ModuleEnum.QXLW_PROJECT.getValue() + "008"), ; private String text; product-server-project-management/src/main/java/com/product/project/management/controller/ProjectBudgetController.java
@@ -1,5 +1,57 @@ package com.product.project.management.controller; public class ProjectBudgetController { 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.ProjectBudgetService; import com.product.util.BaseUtil; @RequestMapping("/api/project-budget") @RestController public class ProjectBudgetController extends AbstractBaseController{ @Autowired ProjectBudgetService projectBudgetService; /** * æ¸ ç©ºé¡¹ç®ææé¢ç® * * @param request * @return */ @RequestMapping(value = "/clear-budget/{version}", method = RequestMethod.POST) @ApiVersion(1) public String clearBudget(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()); } boolean succ = projectBudgetService.clearBudget(fse.getString(Cmnconst.PROJECT_UUID)); if (succ) { return OK(); } return this.error(SystemCode.PROJECT_BUDGET_CLEAR_FAIL.getValue(), SystemCode.PROJECT_BUDGET_CLEAR_FAIL.getText()); } catch (BaseException e) { e.printStackTrace(); return this.error(e); } catch (Exception e) { e.printStackTrace(); return this.error(SystemCode.PROJECT_BUDGET_OPERATE_ERROR.getValue(), SystemCode.PROJECT_BUDGET_OPERATE_ERROR.getText() + e.getMessage()); } } } product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java
@@ -173,16 +173,12 @@ //è·ååæ° 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))); return OK_List(projectInfoService.listItemizeBudget(fse.getString(Cmnconst.ITEMIZE_UUID), fse.getInteger(CoreConst.CPAGE), fse.getInteger(CoreConst.PAGESIZE))); } catch (BaseException e) { e.printStackTrace(); return this.error(e); product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java
@@ -1,6 +1,5 @@ package com.product.project.management.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,6 +14,7 @@ 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.ItemizeUtil; import com.product.project.management.util.ProjectItemUtil; import com.product.util.BaseUtil; @@ -32,6 +32,9 @@ * @param headerDataList excelæ 颿°æ® */ public DataTableEntity importBudget2(DataTableEntity dtParseData, List<List<String>> headerDataList) { try { //夿æ¯å¦æè§£æEXCELæ°æ® if (BaseUtil.dataTableIsEmpty(dtParseData)) { return null; @@ -46,8 +49,34 @@ 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); //çæææç±»å String bugetCode = fseParseData.getString(Cmnconst.BUDGET_CODE); String materialType = null; if ("声æµç®¡".equals(bugetCode)) { materialType = "2"; }else { String materialCode = fseParseData.getString(Cmnconst.MATERIAL_CODE); if (materialCode.contains("æ¶ç«ç")) { materialType = "1"; fseParseData.setValue(Cmnconst.MATERIAL_CODE, ItemizeUtil.getChineseOrEnglishOrNumber("ENGLISHNUMBER", materialCode)); }else if (materialCode.contains("é¢çç½")) { materialType = "3"; fseParseData.setValue(Cmnconst.MATERIAL_CODE, ItemizeUtil.getChineseOrEnglishOrNumber("ENGLISHNUMBER", materialCode)); }else{ FieldSetEntity fseMaterial = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_BASE_MATERIAL,"material_code=?", new Object[] {materialCode}, false); if (fseMaterial != null) { materialType = fseMaterial.getString(Cmnconst.MATERIAL_TYPE); if (materialType.indexOf("0")>-1) { materialType = "0"; } } } } fseParseData.setValue(Cmnconst.MATERIAL_TYPE, materialType); } if (!BaseUtil.dataTableIsEmpty(dtNewProjectItem)) { try { @@ -55,6 +84,9 @@ } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } return dtParseData; } @@ -73,8 +105,10 @@ 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; FieldSetEntity fseProject = baseDao.getFieldSetByFilter(Cmnconst.PRODUCT_PROJECT_QXLW, "project_name=?", new Object[] {fseParseData.getString("field0")}, false); String projectUUID = fseProject.getUUID(); //循ç¯field1~field6åæ®µï¼éæ¥çæå¯¹åºç项ç®åé¡¹æ°æ® for (int i = 1; i < 7; i++) { for (int i = 1; i < 8; i++) { //è·åå项åç§°,夿æ¯å¦ä¸ºç©º String itemize = fseParseData.getString("field"+i); @@ -97,7 +131,7 @@ //夿项ç®å项æ¯å¦åå¨äºéåä¸ if(!itemizeFullNameAndCode.containsKey(itemizFullName)) { //æ¥è¯¢å项åä¸çº§å项æ¯å¦åå¨äºæ°æ®åºä¸ FieldSetEntity fseProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "itemize_full_name=?", new Object[] {itemizFullName}, false); FieldSetEntity fseProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid = ? AND itemize_full_name=?", new Object[] {projectUUID,itemizFullName}, false); if (fseProjectItem == null) { String uuid = UUID.randomUUID().toString(); String code; @@ -107,9 +141,9 @@ }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); 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); }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); fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "project_uuid = ? AND itemize_parent_code = ?", new Object[] {projectUUID, itemizeFullNameAndCode.get(itemizeParent)}, false, null); } if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) { code = ProjectItemUtil.autoCreateCode(itemizeFullNameAndCode.get(itemizeParent)); @@ -120,7 +154,7 @@ 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.PROJECT_UUID, projectUUID); fseNewProject.setValue(Cmnconst.ITEMIZE, itemize); fseNewProject.setValue(Cmnconst.ITEMIZE_CODE, code); fseNewProject.setValue(Cmnconst.ITEMIZE_PARENT_CODE, itemizeFullNameAndCode.get(itemizeParent)); @@ -135,9 +169,9 @@ 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); 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); }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); fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, " project_uuid = ? AND itemize_parent_code=?", new Object[] {projectUUID, fseProjectItem.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false, null); } itemizeFullNameAndUUID.put(itemizFullName, uuid); itemizeFullNameAndCode.put(itemizFullName, code); @@ -149,79 +183,15 @@ } /** * 项ç®é¢ç®å¯¼å ¥ * @param dtParseData è§£ææ°æ® * @param headerDataList excelæ 颿°æ® */ public DataTableEntity importBudget(DataTableEntity dtParseData, List<List<String>> headerDataList) { //夿æ¯å¦æè§£æEXCELæ°æ® if (BaseUtil.dataTableIsEmpty(dtParseData)) { return null; } //声æå¼å¸¸é StringBuilder sbError = new StringBuilder(); //éåexcelè½¬æ¢æ°æ® for (int i = 0; i < dtParseData.getRows(); i++) { FieldSetEntity fseParseData = dtParseData.getFieldSetEntity(i); //æ ¹æ®è§£ææ°æ®è·å项ç®åé¡¹ä¿¡æ¯ List<Object> params = new ArrayList<>(); String projectItem = autoCreateFilter(params, fseParseData); //æ ¹æ®æ¨¡æ¿é¡¹ç®å项æ¥è¯¢æ°æ®åºé¡¹ç®å项 FieldSetEntity fseProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid IN (SELECT uuid FROM product_project_qxlw WHERE project_name=?) AND itemize_full_name=?", params.toArray(), false); if(fseProjectItem==null) { sbError.append(String.format("第 %s è¡é¡¹ç®å项 '%s' ä¸åå¨äºç³»ç»ä¸ã", fseParseData.getString("~row~"), projectItem)); continue; } //è®¾ç½®å ³è项ç®å项 fseParseData.setValue("project_itemize_uuid", fseProjectItem.getUUID()); //è·åç¼ç çæææç±»å String budgetCode = fseParseData.getString(Cmnconst.BUDGET_CODE); Integer materialType = 0; if("æ¶ç«ç".equals(budgetCode)) { materialType = 1; }else if("声æµç®¡".equals(budgetCode)) { materialType = 2; }else { //ç½ç FieldSetEntity materialInfo = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_BASE_MATERIAL, "material_type=3 AND material_name like ?", new Object[] {fseParseData.getString(Cmnconst.MATERIAL_CODE)+"%"}, false); if (materialInfo!=null) { materialType = 3; } } fseParseData.setValue(Cmnconst.MATERIAL_TYPE, materialType); } //夿æ¯å¦å å«éè¯¯ä¿¡æ¯ if (!BaseUtil.strIsNull(sbError.toString())) { throw new BaseException(SystemCode.PROJECT_BUDGET_IMPORT_FAIL.getValue(), sbError.toString()); } return dtParseData; } /** * èªå¨çææ¥è¯¢é¡¹ç®å项filter * @param params * @param fseParseData * æ¸ é¤ææé¢ç® * @param projectUUID * @return */ public String autoCreateFilter(List<Object> params , FieldSetEntity fseParseData) { StringBuilder projectItem = new StringBuilder(); for (int i = 1; i < 7; i++) { String fieldValue = fseParseData.getString("field"+i); if(!BaseUtil.strIsNull(fieldValue)) { if (i>2) { projectItem.append("/"); } if(i==1) { params.add(fieldValue); }else{ projectItem.append(fieldValue); } } public boolean clearBudget(String projectUUID) { DataTableEntity dtOutbound = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_OUTBOUND, "project_uuid=?", new Object[] {projectUUID}); if (!BaseUtil.dataTableIsEmpty(dtOutbound)) { throw new BaseException(SystemCode.PROJeCT_BUDGET_CLEAR_FAIL_HAS_OUTBOUND.getValue(), SystemCode.PROJeCT_BUDGET_CLEAR_FAIL_HAS_OUTBOUND.getText()); } params.add(projectItem.toString()); return projectItem.toString(); return baseDao.executeUpdate("DELETE FROM product_project_budget WHERE project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=?)", new Object[] {projectUUID}); } } product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
@@ -1,8 +1,5 @@ package com.product.project.management.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSONArray; @@ -97,30 +94,20 @@ /** * è·åå项é¢ç®ä¿¡æ¯ * * @param projectUUID 项ç®UUID * @param itemizeCode å项ç¼ç * @param itemizeUUID å项UUID * @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; public DataTableEntity listItemizeBudget(String itemizeUUID, Integer capge, Integer pageSize) { if (!BaseUtil.strIsNull(itemizeUUID)) { DataTableEntity dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BUDGET, "project_itemize_uuid = ?", new Object[] {itemizeUUID}, null, null, pageSize, capge); if (!BaseUtil.dataTableIsEmpty(dtItemizeBudget)) { baseDao.loadPromptData(dtItemizeBudget); } return dtItemizeBudget; } return null; } /** product-server-project-management/src/main/java/com/product/project/management/util/ItemizeUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.product.project.management.util; public class ItemizeUtil { public static void main(String[] args) { System.out.println(getChineseOrEnglishOrNumber("ENGLISH","C12æ¶ç«ç")); System.out.println(getChineseOrEnglishOrNumber("NUMBER","C12æ¶ç«ç")); System.out.println(getChineseOrEnglishOrNumber("CHINESE","C12æ¶ç«ç")); System.out.println(getChineseOrEnglishOrNumber("ENGLISHNUMBER","C12æ¶ç«ç")); System.out.println(getChineseOrEnglishOrNumber("NUMBERCHINESE","C12æ¶ç«ç")); } /** * æ ¹æ®è¯è¨æªåå¯¹åºææ¬ * @param language * @param str * @return */ public static String getChineseOrEnglishOrNumber(String language, String str) { StringBuffer sbf = new StringBuffer(); char[] charArray = str.toCharArray(); for (int i = 0; i < charArray.length; i++) { // è·å¾ä¸æ if (language.toUpperCase().indexOf("CHINESE") > -1) { // Java夿ä¸ä¸ªå符串æ¯å¦æä¸ææ¯å©ç¨Unicodeç¼ç æ¥å¤æï¼å ä¸ºä¸æçç¼ç åºé´ä¸ºï¼0x4e00--0x9fbb if ((charArray[i] >= 0x4e00) && (charArray[i] <= 0x9fbb)) { sbf.append(charArray[i]); } } if (language.toUpperCase().indexOf("ENGLISH") > -1) { // Java夿ä¸ä¸ªå符串æ¯å¦æä¸ææ¯å©ç¨Unicodeç¼ç æ¥å¤æï¼å ä¸ºä¸æçç¼ç åºé´ä¸ºï¼65--122 if ((charArray[i] >= 65) && (charArray[i] <= 122)) { sbf.append(charArray[i]); } } if (language.toUpperCase().indexOf("NUMBER") > -1) { // Java夿ä¸ä¸ªå符串æ¯å¦æä¸ææ¯å©ç¨Unicodeç¼ç æ¥å¤æï¼å 为æ°åçç¼ç åºé´ä¸ºï¼48--57 if (str.charAt(i) >= 48 && str.charAt(i) <= 57) { sbf.append(charArray[i]); } } } return sbf.toString(); } }